前段時間做了2個Android方面的項目,現在想抽空對其中的有些知識點進行下總結,也算進一步的學習了。
由於開發手機客戶端一般都要和服務器打交道,因此用戶的登錄驗證在一般的應用中都少不了。因而我將以前做的項目中的使用webservice驗證的這塊
單獨寫出來了。我們的手機應用的服務器端采用的是Asp.net開發的,因而webservice的開發也是用C#開發的,發布在IIS上的。
在Android SDK中並沒有提供調用WebService的庫,因此,需要使用第三方的SDK來調用WebService。PC版本的WebService庫非常豐富,但這些對Android來說過於龐大。適合手機的WebService客戶端的SDK有一些,比較常用的是KSOAP2。
KSOAP2 地址:http://code.google.com/p/ksoap2-android/
我們在項目中使用的是: ksoap2-android-assembly-2.4-jar-with-dependencies.jar。
在項目中引用KSOAP2后,我們就要引入下面幾個包了:
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
然后我們就要編寫調用驗證用戶登錄的方法,並在其中調用webservice方法了,代碼如下:
public String GetUserWS(String methodName, String[] parameterList) {
// 創建SoapObject對象,並指定WebService的命名空間和調用的方法名
SoapObject request = new SoapObject(Config.NAMESPACE, methodName);
// 調用的函數如果有參數,這里可以設置需要傳遞的參數 注意:第一個參數使用arg0 多個參數依次類推 arg1,arg2...
if (parameterList != null) {
// for (int i = 0; i < parameterList.length; i++) {
request.addProperty("key", parameterList[0]);
request.addProperty("userName", parameterList[1]);
request.addProperty("passWord", parameterList[2]);
// }
}
// 生成調用WebService方法的SOAP請求信息,並指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// envelope.setOutputSoapObject(request);
// 上邊的一句等價於下邊的這句 將SoapObject對象賦給envelope對象
envelope.bodyOut = request;
// 當前開發的是.net WS 這里需要不調用Java WS
envelope.dotNet = true;
/*
* 這里不要使用 AndroidHttpTransport ht = new AndroidHttpTransport(URL);
* 這是一個要過期的類
* 創建HttpTransportSE對象。通過HttpTransportSE類的構造方法可以指定WebService的WSDL文檔的URL
*/
//這里的SOAP_GETUSERINFOACTION = "http://172.16.xx.xxx:3366/Service/EWineService.asmx?op=Mobile_GetUserInfo";
HttpTransportSE ht = new HttpTransportSE(Config.SOAP_GETUSERINFOACTION);
try {
// 請求WS
ht.call(Config.SOAP_ACTION, envelope);
if (envelope.getResponse() != null) {
// 獲得WS函數返回值信息
// System.out.println(envelope.getResponse().toString());
Log.d("wine", "GetUserWS Result:"
+ envelope.getResponse().toString());
return envelope.getResponse().toString();
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
Log.d("wine", "GetUserWS Error:" + e.getMessage());
}
return null;
}
具體的調用代碼如下:
// 點確定按鈕所執行的東東
String[] parameterList = new String[3];
parameterList[0] = LOGINKEY;
parameterList[1] = TxtUser.getText().toString();
parameterList[2] = TxtPassword.getText().toString();
//注意Config.METHOD_GETUSERINFO是具體調用的webservice中方法名,例如:METHOD_GETUSERINFO = "Mobile_GetUserInfo";
// 調用webService
String strRemoteInfo = GetUserWS(Config.METHOD_GETUSERINFO,
parameterList);