編輯:Android資訊
WebService是基於SOAP協議可實現web服務器與web服務器之間的通信,因采用SOAP協議傳送XML數據具有平台無關性,也是成為解決異構平台之間通信的重要解決方案,比如Java平台與.net平台之間。因此在web應用中有著舉足輕重的作用,很多機構、組織都在各自平台上對外發布了WebService(例如:天氣預報、航班信息、股市行情等等),這樣任何平台和客戶都可以享受到這些服務,當然有些是要付費的。
對於Android端調用WebService,有兩種方式,一種自己編寫代碼主要通過URL獲得 HttpURLConnection的方式建立與webservice的連接,然後進行I/O讀寫傳送和獲得數據,並對獲得數據進行XML解析,比較麻煩。另一種就是使用第三方組件,比較常用的就是ksoap2-android。
ksoap2-android這個開源組件針對Android平台提供了一個輕量級和高效的SOAP類庫,可方便實現Android端與WebService之間的通信
ksoap2-android項目的地址:http://code.google.com/p/ksoap2-android/ 大家可以下載最新版本jar,然後將jar加入到項目中即可。
我這裡使用是ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
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;
執行效果如下:
完整代碼實現:
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(); } }; }
手機歸屬地服務
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
1. 簡介 直到4g時代,流量依然是寶貴的東西。而移動網絡傳輸中,最占流量的一種載體:圖片,成為了我們移動開發者不得不關注的一個問題。 我們關注的問題,無非是圖片
依賴管理 依賴管理是Gradle最閃耀的地方,最好的情景是,你僅僅只需添加一行代碼在你的build文件,Gradle會自動從遠程倉庫為你下載相關的jar包,並且保
整個框架式不同於androidannotations,Roboguice等ioc框架,這是一個類似spring的實現方式。在整應用的生命周期中找到切入點,然後對a
之前一直頭痛於沒有辦法在多個程序中共享資源,用作公共類庫的方法也是使用的導出jar再導入的辦法,現在終於初步搞明白了,可算解脫了~,分享出來。 建立公共庫 首先建