一、準備相關資料
下載好最新版本的ksoap2 jar包並導入到需要調用Webservice的項目中(官網:http://code.google.com/p/ksoap2-android/)。
二、Webservice的調用(
public class WCF {
private static final String NameSpace = "服務器名稱";
private static final String URL = "服務器的URL";
private static final String Method = "調用接口裏面的方法名";
private static final String ACTION = "調用的動作,即URL+Method";
public String Request() {
String result = ""; //定義返回值類型
SoapObject soapObject = new SoapObject(NameSpace, Method);
soapObject.addProperty("參數名", "參數值"); //調用的方法若是有參數的,則從這裏設置參數
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // 版本
envelope.bodyOut = soapObject;
envelope.dotNet = true;
envelope.setOutputSoapObject(soapObject);
HttpTransportSE trans = new HttpTransportSE(URL); //創建Http傳輸對象
trans.debug = true; // 使用調試功能
try {
trans.call(ACTION, envelope);
System.out.println("Call Successful!");
} catch (IOException e) {
System.out.println("IOException");
e.printStackTrace();
} catch (XmlPullParserException e) {
System.out.println("XmlPullParserException");
e.printStackTrace();
}
try {
result = envelope.getResponse().toString();
} catch (SoapFault e) {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
return result;
}
}
此類可以先在Java項目中測試通過再複製到Android項目中使用,這樣調試起來會比較方便。
三、MainActivity調用WCF類完成對Webservice接口的調用
首先,我們必須爲Android項目添加網絡功能的許可,只需要在AndroidManifest文件中添加一下語句即可
<uses-permission android:name="android.permission.INTERNET" />
接着,我們就可以開始編寫MainActivity中的代碼了,由於MainActivity的代碼大部分爲系統生成,而其他組件的添加在這裏不一一贅述了,我們直接看調用Webservice的方法和步驟。因爲Android系統的線程是安全的,所以我們不能在MainActivity中直接調用WCF類,而需要開闢一個線程去調用。下面我們將繼承AsyncTask類,並覆蓋其doInBackground和onPostExecute方法
private class AsyncRequest extends AsyncTask<String,Integer,String>{ //這三個參數分別代表傳輸參數的類型、返回參數的個數以及返回參數的類型
@Override
protected String doInBackground(String... arg) {
// TODO Auto-generated method stub
WCF ws = new WCF(); //實例化WCF類
return ws.Request(arg[0]); //傳遞參數
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result); //result爲返回參數的值
}
}
}
new AsyncRequest().execute("參數值");