Android與服務(wù)器端數(shù)據(jù)交互(基于SOAP協(xié)議整合android+webservice)-_第1頁(yè)
Android與服務(wù)器端數(shù)據(jù)交互(基于SOAP協(xié)議整合android+webservice)-_第2頁(yè)
Android與服務(wù)器端數(shù)據(jù)交互(基于SOAP協(xié)議整合android+webservice)-_第3頁(yè)
Android與服務(wù)器端數(shù)據(jù)交互(基于SOAP協(xié)議整合android+webservice)-_第4頁(yè)
Android與服務(wù)器端數(shù)據(jù)交互(基于SOAP協(xié)議整合android+webservice)-_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 HYPERLINK /zhangdongzi/archive/2011/04/19/2020688.html Android與服務(wù)器端數(shù)據(jù)交互(基于SOAP協(xié)議整合android+webservice)上一節(jié)中我們通過(guò)http協(xié)議,采用HttpClient向服務(wù)器端action請(qǐng)求數(shù)據(jù)。當(dāng)然調(diào)用服務(wù)器端方法獲取數(shù)據(jù)并不止這一種。WebService也可以為我們提供所需數(shù)據(jù),那么什么是webService呢?,它是一種基于SAOP協(xié)議的遠(yuǎn)程調(diào)用標(biāo)準(zhǔn),通過(guò)webservice可以將不同操作系統(tǒng)平臺(tái),不同語(yǔ)言,不同技術(shù)整合到一起。 我們?cè)赑C機(jī)器java客戶端中,需要一些庫(kù),比如XFire,Axi

2、s2,CXF等等來(lái)支持訪問WebService,但是這些庫(kù)并不適合我們資源有限的android手機(jī)客戶端,做過(guò)JAVA ME的人都知道有KSOAP這個(gè)第三方的類庫(kù),可以幫助我們獲取服務(wù)器端webService調(diào)用,當(dāng)然KSOAP已經(jīng)提供了基于android版本的jar包了,那么我們就開始吧:首先下載KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包然后新建android項(xiàng)目:并把下載的KSOAP包放在android項(xiàng)目的lib目錄下:右鍵-build path-configure build path-選擇Librar

3、ies,如圖:以下分為七個(gè)步驟來(lái)調(diào)用WebService方法:第一:實(shí)例化SoapObject 對(duì)象,指定webService的命名空間(從相關(guān)WSDL文檔中可以查看命名空間),以及調(diào)用方法名稱。如:View Code /命名空間privatestaticfinal String serviceNameSpace=http:/WebX/;/調(diào)用方法(獲得支持的城市)privatestaticfinal String getSupportCity=getSupportCity;/實(shí)例化SoapObject對(duì)象 SoapObject request=new SoapObject(serviceNa

4、meSpace, getSupportCity);第二步:假設(shè)方法有參數(shù)的話,設(shè)置調(diào)用方法參數(shù)request.addProperty(參數(shù)名稱,參數(shù)值);第三步:設(shè)置SOAP請(qǐng)求信息(參數(shù)部分為SOAP協(xié)議版本號(hào),與你要調(diào)用的webService中版本號(hào)一致):View Code /獲得序列化的Envelope SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut=request;第四步:注冊(cè)Envelope,(new MarshalBase6

5、4().register(envelope);第五步:構(gòu)建傳輸對(duì)象,并指明WSDL文檔URL:View Code /請(qǐng)求URLprivatestaticfinal String serviceURL=/webservices/weatherwebservice.asmx;/Android傳輸對(duì)象 AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL); transport.debug=true;第六步:調(diào)用WebService(其中參數(shù)為1:命名空間+方法名稱,2:Envelope對(duì)象):View Code tra

6、nsport.call(serviceNameSpace+getWeatherbyCityName, envelope);第七步:解析返回?cái)?shù)據(jù):View Code if(envelope.getResponse()!=null)return parse(envelope.bodyIn.toString(); /* * 解析XML * param str * return */privatestatic List parse(String str) String temp; List list=new ArrayList();if(str!=null & str.length()0)int st

7、art=str.indexOf(string);int end=str.lastIndexOf(;); temp=str.substring(start, end-3); String test=temp.split(;);for(int i=0;itest.length;i+)if(i=0) temp=testi.substring(7); else temp=testi.substring(8); int index=temp.indexOf(,); list.add(temp.substring(0, index); return list; 這樣就成功啦。那么現(xiàn)在我們就來(lái)測(cè)試下吧,這里

8、有個(gè)地址提供webService天氣預(yù)報(bào)的服務(wù)的,我這里只提供獲取城市列表:View Code /命名空間 private static final String serviceNameSpace=http:/WebX/; /請(qǐng)求URL private static final String serviceURL=/webservices/weatherwebservice.asmx; /調(diào)用方法(獲得支持的城市) private static final String getSupportCity=getSupportCity; /調(diào)用城市的方法(需要帶參數(shù)) private static

9、final String getWeatherbyCityName=getWeatherbyCityName; /調(diào)用省或者直轄市的方法(獲得支持的省份或直轄市) private static final String getSupportProvince=getSupportProvince;然后你可以在瀏覽器中輸入地址(WSDL):serviceURL,你會(huì)看到一些可供調(diào)用的方法:我們選擇獲取國(guó)內(nèi)外主要城市或者省份的方法吧:getSupportProvice,然后調(diào)用,你會(huì)發(fā)現(xiàn)瀏覽器返回給我們的是xml文檔:View Code - 直轄市特別行政區(qū)黑龍江吉林遼寧內(nèi)蒙古河北河南山東山西江蘇安

10、徽陜西寧夏甘肅青海湖北湖南浙江江西福建貴州四川廣東廣西云南海南新疆西藏臺(tái)灣亞洲歐洲非洲北美洲南美洲大洋洲我們可以用 listview來(lái)顯示:那么下面我將給出全部代碼:View Code publicclass WebServiceHelper /WSDL文檔中的命名空間privatestaticfinal String targetNameSpace=http:/WebX/;/WSDL文檔中的URLprivatestaticfinal String WSDL=/WebServices/WeatherWebService.asmx?wsdl;/需要調(diào)用的方法名(獲得本天氣預(yù)報(bào)Web Servic

11、es支持的洲、國(guó)內(nèi)外省份和城市信息)privatestaticfinal String getSupportProvince=getSupportProvince;/需要調(diào)用的方法名(獲得本天氣預(yù)報(bào)Web Services支持的城市信息,根據(jù)省份查詢城市集合:帶參數(shù))privatestaticfinal String getSupportCity=getSupportCity;/根據(jù)城市或地區(qū)名稱查詢獲得未來(lái)三天內(nèi)天氣情況、現(xiàn)在的天氣實(shí)況、天氣和生活指數(shù)privatestaticfinal String getWeatherbyCityName=getWeatherbyCityName;/*

12、* 獲得州,國(guó)內(nèi)外省份和城市信息 * return */public List getProvince() List provinces=new ArrayList(); String str=; SoapObject soapObject=new SoapObject(targetNameSpace,getSupportProvince);/request.addProperty(參數(shù), 參數(shù)值);調(diào)用的方法參數(shù)與參數(shù)值(根據(jù)具體需要可選可不選) SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnve

13、lope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject);/envelope.bodyOut=request; AndroidHttpTransport httpTranstation=new AndroidHttpTransport(WSDL);/或者HttpTransportSE httpTranstation=new HttpTransportSE(WSDL);try httpTranstation.call(targetNameSpace+getSupportProvince, envelop

14、e); SoapObject result=(SoapObject)envelope.getResponse();/下面對(duì)結(jié)果進(jìn)行解析,結(jié)構(gòu)類似json對(duì)象 /str=(String) result.getProperty(6).toString();int count=result.getPropertyCount();for(int index=0;indexcount;index+) provinces.add(result.getProperty(index).toString(); catch (IOException e) / TODO Auto-generated catch b

15、lock e.printStackTrace(); catch (XmlPullParserException e) / TODO Auto-generated catch block e.printStackTrace(); return provinces; /* * 根據(jù)省份或者直轄市獲取天氣預(yù)報(bào)所支持的城市集合 * param province * return */public List getCitys(String province) List citys=new ArrayList(); SoapObject soapObject=new SoapObject(targetNa

16、meSpace,getSupportCity); soapObject.addProperty(byProvinceName, province); SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject); AndroidHttpTransport httpTransport=new AndroidHttpTransport(WSDL);try httpT

17、ransport.call(targetNameSpace+getSupportCity, envelope); SoapObject result=(SoapObject)envelope.getResponse();int count=result.getPropertyCount();for(int index=0;indexcount;index+) citys.add(result.getProperty(index).toString(); catch (IOException e) / TODO Auto-generated catch block e.printStackTra

18、ce(); catch (XmlPullParserException e) / TODO Auto-generated catch block e.printStackTrace(); return citys; /* * 根據(jù)城市信息獲取天氣預(yù)報(bào)信息 * param city * return */public WeatherBean getWeatherByCity(String city) WeatherBean bean=new WeatherBean(); SoapObject soapObject=new SoapObject(targetNameSpace,getWeather

19、byCityName); soapObject.addProperty(theCityName,city);/調(diào)用的方法參數(shù)與參數(shù)值(根據(jù)具體需要可選可不選) SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject);/envelope.bodyOut=request; AndroidHttpTransport httpTranstation=new And

20、roidHttpTransport(WSDL);/或者HttpTransportSE httpTranstation=new HttpTransportSE(WSDL);try httpTranstation.call(targetNameSpace+getWeatherbyCityName, envelope); SoapObject result=(SoapObject)envelope.getResponse();/下面對(duì)結(jié)果進(jìn)行解析,結(jié)構(gòu)類似json對(duì)象 bean=parserWeather(result); catch (IOException e) / TODO Auto-gene

21、rated catch block e.printStackTrace(); catch (XmlPullParserException e) / TODO Auto-generated catch block e.printStackTrace(); return bean; /* * 解析返回的結(jié)果 * param soapObject */protected WeatherBean parserWeather(SoapObject soapObject) WeatherBean bean=new WeatherBean(); ListMap list=new ArrayListMap()

22、; Map map=new HashMap();/城市名 bean.setCityName(soapObject.getProperty(1).toString();/城市簡(jiǎn)介 bean.setCityDescription(soapObject.getProperty(soapObject.getPropertyCount()-1).toString();/天氣實(shí)況+建議 bean.setLiveWeather(soapObject.getProperty(10).toString()+n+soapObject.getProperty(11).toString();/其他數(shù)據(jù) /日期, St

23、ring date=soapObject.getProperty(6).toString();/- String weatherToday=今天: + date.split( )0; weatherToday+=n天氣:+ date.split( )1; weatherToday+=n氣溫:+soapObject.getProperty(5).toString(); weatherToday+=n風(fēng)力:+soapObject.getProperty(7).toString(); weatherToday+=n; List icons=new ArrayList(); icons.add(par

24、seIcon(soapObject.getProperty(8).toString(); icons.add(parseIcon(soapObject.getProperty(9).toString(); map.put(weatherDay, weatherToday); map.put(icons,icons); list.add(map);/- map=new HashMap(); date=soapObject.getProperty(13).toString(); String weatherTomorrow=明天: + date.split( )0; weatherTomorrow

25、+=n天氣:+ date.split( )1; weatherTomorrow+=n氣溫:+soapObject.getProperty(12).toString(); weatherTomorrow+=n風(fēng)力:+soapObject.getProperty(14).toString(); weatherTomorrow+=n; icons=new ArrayList(); icons.add(parseIcon(soapObject.getProperty(15).toString(); icons.add(parseIcon(soapObject.getProperty(16).toStr

26、ing(); map.put(weatherDay, weatherTomorrow); map.put(icons,icons); list.add(map);/- map=new HashMap(); date=soapObject.getProperty(18).toString(); String weatherAfterTomorrow=后天: + date.split( )0; weatherAfterTomorrow+=n天氣:+ date.split( )1; weatherAfterTomorrow+=n氣溫:+soapObject.getProperty(17).toStr

27、ing(); weatherAfterTomorrow+=n風(fēng)力:+soapObject.getProperty(19).toString(); weatherAfterTomorrow+=n; icons=new ArrayList(); icons.add(parseIcon(soapObject.getProperty(20).toString(); icons.add(parseIcon(soapObject.getProperty(21).toString(); map.put(weatherDay, weatherAfterTomorrow); map.put(icons,icon

28、s); list.add(map); /- bean.setList(list);return bean; /解析圖標(biāo)字符串privateint parseIcon(String data)/ 0.gif,返回名稱0,int resID=32; String result=data.substring(0, data.length()-4).trim();/ String icon=data.split(.); / String result=icon0.trim(); / Log.e(this is the icon, result.trim();if(!result.equals(noth

29、ing) resID=Integer.parseInt(result.trim(); return resID;/return (a_+data).split(.)0; 以及幫助類:View Code publicclass WebServiceUtil /命名空間privatestaticfinal String serviceNameSpace=http:/WebX/;/請(qǐng)求URLprivatestaticfinal String serviceURL=/webservices/weatherwebservice.asmx;/調(diào)用方法(獲得支持的城市)privatestaticfinal

30、String getSupportCity=getSupportCity;/調(diào)用城市的方法(需要帶參數(shù))privatestaticfinal String getWeatherbyCityName=getWeatherbyCityName;/調(diào)用省或者直轄市的方法(獲得支持的省份或直轄市)privatestaticfinal String getSupportProvince=getSupportProvince;/* * return城市列表 */publicstatic List getCityList()/實(shí)例化SoapObject對(duì)象 SoapObject request=new So

31、apObject(serviceNameSpace, getSupportCity);/獲得序列化的Envelope SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut=request; (new MarshalBase64().register(envelope);/Android傳輸對(duì)象 AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL); transpo

32、rt.debug=true;/調(diào)用try transport.call(serviceNameSpace+getWeatherbyCityName, envelope);if(envelope.getResponse()!=null)return parse(envelope.bodyIn.toString(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); catch (XmlPullParserException e) / TODO Auto-generated catch bloc

33、k e.printStackTrace(); returnnull; publicstatic List getProviceList()/實(shí)例化SoapObject對(duì)象 SoapObject request=new SoapObject(serviceNameSpace, getSupportProvince);/獲得序列化的Envelope SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut=request; (new MarshalBase64().registe

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論