Android中使用Android Ksoap2呼叫WebService
一、WebService介紹
WebService是基於SOAP協議可實現web伺服器與web伺服器之間的通訊,因採用SOAP協議傳送XML資料具有平臺無關性,也是成為解決異構平臺之間通訊的重要解決方案,比如Java平臺與.net平臺之間。因此在web應用中有著舉足輕重的作用,很多機構、組織都在各自平臺上對外發布了WebService(例如:天氣預報、航班資訊、股市行情等等),這樣任何平臺和客戶都可以享受到這些服務,當然有些是要付費的。
二、Android ksoap2元件
對於Android端呼叫WebService,有兩種方式,一種自己編寫程式碼主要通過URL獲得 HttpURLConnection的方式建立與webservice的連線,然後進行I/O讀寫傳送和獲得資料,並對獲得資料進行XML解析,比較麻煩。另一種就是使用第三方元件,比較常用的就是ksoap2-android。
ksoap2-android這個開源元件針對Android平臺提供了一個輕量級和高效的SOAP類庫,可方便實現Android端與WebService之間的通訊
1、環境搭建
ksoap2-android專案的地址:http://code.google.com/p/ksoap2-android/ 大家可以下載最新版本jar,然後將jar加入到專案中即可。
我這裡使用是ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
2、Ksoap2 使用的主要步驟
1)web服務引數準備
// webservice服務地址 String url= “http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx”; //web服務的名稱空間 String namespace=” http://WebXml.com.cn/”; //請求服務的方法名稱 String methodName=”getMobileCodeInfo”; //soap請求地址 String soapActionAddress = "http://WebXml.com.cn/getMobileCodeInfo";
2)建立HttpTransportSE,該元件可傳送請求
HttpTransportSE transport = new HttpTransportSE(url);
3)建立SoapObject,新增要傳送的資料(資訊載體)
SoapObject soapObject = new SoapObject(namespace,methodName); soapObject.addProperty(name,value);//新增資料 …
4)建立SoapSerializationEnvelope物件,指定xml版本,以及request中body
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = soapObject; envelope.setOutputSoapObject(soapObject);
5)傳送請求,呼叫webserivce中的方法
httpTransportSE.call(soapActionAddress, envelope);//服務傳回的資訊,會放在envelope的bodyIn屬性中
6) 獲取服務傳回的資料
SoapObject object = (SoapObject) envelope.bodyIn;
三、實現案例——通過呼叫webservice查詢手機號碼的歸屬地
執行效果如下:
完整程式碼實現:
public class MainActivity extends Activity { ///手機歸屬地Webservice的引數資訊 private static final String nameSpaceAddress = "http://WebXml.com.cn/"; private static final String urlAddress = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"; private static final String methodNameAddress = "getMobileCodeInfo"; private static final String soapActionAddress = "http://WebXml.com.cn/getMobileCodeInfo"; private TextView telAddress = null; private EditText tel = null; private Button btnAddress = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnAddress = (Button) this.findViewById(R.id.btnSearchAddress); telAddress = (TextView) this.findViewById(R.id.telAddress); tel = (EditText) this.findViewById(R.id.telNo); btnAddress.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { public void run() { getTelAddress(); } }).start(); } }); /** * 請求WebService並獲得返回的手機號碼歸屬地資訊 */ public void getTelAddress() { SoapObject soapObject = new SoapObject(nameSpaceAddress, methodNameAddress);//建立SOAP物件 //設定屬性,這些屬性值通過SOAP協議傳送給伺服器 soapObject.addProperty("mobileCode", tel.getText().toString());//要查詢的電話號碼 soapObject.addProperty("userId", ""); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut = soapObject; envelope.dotNet = true; envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTransportSE = new HttpTransportSE(urlAddress); try { //呼叫服務 httpTransportSE.call(soapActionAddress, envelope); } catch (Exception e) { e.printStackTrace(); } //獲取服務傳回的資料,手機歸屬地資訊 SoapObject object = (SoapObject) envelope.bodyIn; txtAddress = object.getProperty(0).toString(); //向主執行緒傳送訊息成功,getTelAddress函式執行完畢 handlerAddress.sendEmptyMessage(0); } Handler handlerAddress = new Handler() { public void handleMessage(Message msg) { telAddress.setText(txtAddress); Toast.makeText(MainActivity.this, "獲取號碼歸屬地成功"+txtAddress, Toast.LENGTH_LONG).show(); } }; }
四、附:常見的WebService服務URL
手機歸屬地服務
http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx
天氣預報Web服務,資料來源於中國氣象局
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
IP地址來:
http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx
中文 <-> 英文雙向翻譯 WEB 服務:
http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx
火車時刻表
http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx
航班查詢服務
http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx
中國股票行情資料 WEB 服務
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
中國電視節目預告
http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx
相關文章
- Android呼叫WebService詳解AndroidWeb
- Android程式使用SOAP呼叫遠端WebService服務AndroidWeb
- Android平臺呼叫WebService詳解AndroidWeb
- webservice中呼叫structWebStruct
- Android呼叫天氣預報的WebService簡單例子AndroidWeb單例
- Android 使用ksoap進行webservice請求AndroidWeb
- android處理webserviceAndroidWeb
- Android 使用js呼叫JavaAndroidJSJava
- webservice介面呼叫Web
- Android中Button呼叫getText()的思考Android
- Android中呼叫傳送郵件Android
- Android開發之WebService介紹AndroidWeb
- Ajax呼叫WebService(一)Web
- C#呼叫webserviceC#Web
- js 呼叫 WebService 方法JSWeb
- android使用JNI呼叫C,C++程式AndroidC++
- android使用C/C++呼叫SO庫AndroidC++
- PHP使用SOAP呼叫.net的WebService資料PHPWeb
- Android ListView的getview()中重複呼叫(position重複呼叫)AndroidView
- Android中的使用Android
- VB中呼叫WebService上的函式的方法Web函式
- java動態呼叫webserviceJavaWeb
- 新增webservice呼叫日誌Web
- Axis2呼叫WebServiceWeb
- PHP呼叫Webservice例項PHPWeb
- webapi建立和呼叫WebServiceWebAPI
- java使用axis 呼叫WCF webservice問題請教JavaWeb
- Android中水波紋使用Android
- Android中SearchView的使用AndroidView
- Android 中如何使用動畫Android動畫
- Android中Handler的使用Android
- Android中SwipeMenuListView的使用AndroidView
- Android中SoundPool的使用Android
- Android中WebView使用解析AndroidWebView
- 使用C#建立webservice及三種呼叫方式 (轉)C#Web
- Mac android呼叫ffmpeg 方法MacAndroid
- Android呼叫攝像頭Android
- android 呼叫系統介面Android