webService:基於SOAP協議的遠程調用標準,經過webService能夠將不用的操做系統平臺,不一樣的計算機語言,不一樣的技術整合到一塊兒。java
調用webService須要導入jar包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包,這個包在網上能夠下載,至於導入的方法 ,右鍵項目,選擇最後一項properties-->Java build path-->Libraies-->Add external Jars 選擇相應的路徑下的jar文件就OK了,而後記得在Order and Export 裏面將選擇的jar文件勾選上。android
調用webService的步驟分爲7個:web
1. 實例化soapObject對象,指定Soap的命名空間(從相關文檔中能夠查看WSDL命名空間以及調用方法)數據庫
- View Code
-
- private static final String serviceNameSpace="http://WebXml.com.cn/";
-
- private static final String getSupportCity="getSupportCity";
-
- SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);
2.假設方法有參數的話,添加調用的方法的參數服務器
request.addProperties("參數名稱","參數值");app
要注意的是,addProperty方法的第1個參數雖然表示調用方法的參數名,但該參數值並不必定與服務端的WebService類中的方法參數名一致,只要設置參數的順序一致便可。ide
3.設置SOAP請求信息(參數部分爲SOAP版本號,與本身要調用的SOAP版本必須一致,也就是你導入到工程中的jar相對應的版本)oop
- SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
- envelope.bodyOut=request; //肯定發送對象
4.註冊Enelopeui
(new MarshalBase64()).register(envelope);spa
5.構建傳輸對象,並指定WDSL文檔中的URL
- private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";
- AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);
- transport.debug=true;
6.調用webService(其中參數爲1:命名空間+方法名稱,envelope對象);
- transport.call(serviceNameSpace+getWeatherbyCityName, envelope);
//5.訪問WebService,第一個參數爲命名空間 + 方法名,第二個參數爲Envelope對象
7.解析返回數據:
- View Code
-
- if(envelope.getResponse()!=null){
- return parse(envelope.bodyIn.toString());
- }
-
- private static List<String> parse(String str){
- String temp;
- List<String> list=new ArrayList<String>();
- if(str!=null && str.length()>0){
- int start=str.indexOf("string");
- int end=str.lastIndexOf(";");
- temp=str.substring(start, end-3);
- String []test=temp.split(";");
-
- for(int i=0;i<test.length;i++){
- if(i==0){
- temp=test[i].substring(7);
- }else{
- temp=test[i].substring(8);
- }
- int index=temp.indexOf(",");
- list.add(temp.substring(0, index));
- }
- }
- return list;
- }