現(xiàn)在Android開發(fā)中在早期Android使用的webservice和后臺(tái)網(wǎng)絡(luò)請(qǐng)求比較多阳啥。
本文的重點(diǎn)是android怎么調(diào)用webservice而不是用哪個(gè)webservice美尸,所以這里就用網(wǎng)上傳的比較多的計(jì)算來電歸屬地的webservice進(jìn)行測(cè)試。這個(gè)webservice地址為:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl倦淀。
下面簡(jiǎn)單介紹一下:
/**
* 手機(jī)號(hào)段歸屬地查詢
*
* @param phoneSec 手機(jī)號(hào)段
*/
public String getRemoteInfo(String phoneSec) throws Exception{
String WSDL_URI = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL";//wsdl 的uri
String namespace = "http://WebXml.com.cn/";//namespace
String methodName = "getMobileCodeInfo";//要調(diào)用的方法名稱
SoapObject request = new SoapObject(namespace, methodName);
// 設(shè)置需調(diào)用WebService接口需要傳入的兩個(gè)參數(shù)mobileCode、userId
request.addProperty("mobileCode", phoneSec);
request.addProperty("userId", "");
//創(chuàng)建SoapSerializationEnvelope 對(duì)象,同時(shí)指定soap版本號(hào)(之前在wsdl中看到的)
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER12);
envelope.bodyOut = request;//由于是發(fā)送請(qǐng)求环鲤,所以是設(shè)置bodyOut
envelope.dotNet = true;//由于是.net開發(fā)的webservice,所以這里要設(shè)置為true
HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URI);
httpTransportSE.call(null, envelope);//調(diào)用
// 獲取返回的數(shù)據(jù)
SoapObject object = (SoapObject) envelope.bodyIn;
// 獲取返回的結(jié)果
result = object.getProperty(0).toString();
Log.d("debug",result);
return result;
}
以上方法在異步線程中調(diào)用比如如下:
class QueryAddressTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
// 查詢手機(jī)號(hào)碼(段)信息*/
try {
result = getRemoteInfo(params[0]);
} catch (Exception e) {
e.printStackTrace();
}
//將結(jié)果返回給onPostExecute方法
return result;
}
@Override
//此方法可以在主線程改變UI
protected void onPostExecute(String result) {
// 將WebService返回的結(jié)果顯示在TextView中
resultView.setText(result);
}
}