In this post I'm going to illustrate how we can access web service in Android using ksoap2-android project that provides a lightweight and efficient SOAP library for the Android platform.
You can download the jar file from following link;
Here is the sample code that illustrate SOAP web service call. I have access a live web service ConvertWeight from http://www.webserviceX.NET/ which convert weight from one unit to another. I have set "envelope.dotNet = true;" in Line 53 since I'm accessing .NET web service. You can comment that line if your web service is not .NET one.
package com.sencide; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.PropertyInfo; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class AndroidWebService extends Activity { private final String NAMESPACE = "http://www.webserviceX.NET/"; private final String URL = "http://www.webservicex.net/ConvertWeight.asmx"; private final String SOAP_ACTION = "http://www.webserviceX.NET/ConvertWeight"; private final String METHOD_NAME = "ConvertWeight"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); String weight = "3700"; String fromUnit = "Grams"; String toUnit = "Kilograms"; PropertyInfo weightProp =new PropertyInfo(); weightProp.setName("Weight"); weightProp.setValue(weight); weightProp.setType(double.class); request.addProperty(weightProp); PropertyInfo fromProp =new PropertyInfo(); fromProp.setName("FromUnit"); fromProp.setValue(fromUnit); fromProp.setType(String.class); request.addProperty(fromProp); PropertyInfo toProp =new PropertyInfo(); toProp.setName("ToUnit"); toProp.setValue(toUnit); toProp.setType(String.class); request.addProperty(toProp); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); try { androidHttpTransport.call(SOAP_ACTION, envelope); SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); Log.i("myApp", response.toString()); TextView tv = new TextView(this); tv.setText(weight+" "+fromUnit+" equal "+response.toString()+ " "+toUnit); setContentView(tv); } catch (Exception e) { e.printStackTrace(); } } }
You have to add INTERNET permission to AndroidManifest.xml as follows;
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sencide" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AndroidWebService" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest>
You can download the source code of above project (Password:sara).
I have updated my previous code in the post Android Login Screen Using HttpClient to authenticate users from web service. There I have illustrated how you can start new activity if the login is successful.
You can download the updated source code with sample .NET web service application (Password:sara).