版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年六安市葉集區(qū)人民醫(yī)院招聘2人考試歷年真題匯編附答案
- 2025年溫州平陽(yáng)縣第二人民醫(yī)院醫(yī)共體公開招聘工作人員13人備考題庫(kù)附答案
- 2025年甘肅省平?jīng)鋈A亭市城鎮(zhèn)公益性崗位專場(chǎng)招聘會(huì)備考題庫(kù)(115人)附答案
- 2025年馬鞍山市民政局下屬事業(yè)單位招聘編外聘用人員3名考試模擬卷附答案
- 2025年黑龍江省神經(jīng)精神病醫(yī)院引進(jìn)高層次人才(博士)招聘4人備考題庫(kù)附答案
- 2025廣東廣州市黃埔區(qū)人民政府黃埔街道辦事處黨建組織員招聘1人(公共基礎(chǔ)知識(shí))綜合能力測(cè)試題附答案
- 2026廣東藍(lán)海豚旅運(yùn)股份有限公司招聘1人筆試備考試題及答案解析
- 2026北京協(xié)和醫(yī)院內(nèi)科ICU合同制科研助理招聘筆試模擬試題及答案解析
- 2026年1月西安醫(yī)學(xué)高等??茖W(xué)校附屬醫(yī)院招聘(58人)筆試模擬試題及答案解析
- (拓展拔高)2025-2026學(xué)年下學(xué)期人教統(tǒng)編版小學(xué)語(yǔ)文四年級(jí)第三單元練習(xí)卷
- 五育融合課件
- 海姆立克急救課件 (完整版)
- 2025年互聯(lián)網(wǎng)營(yíng)銷游戲化營(yíng)銷案例解析可行性研究報(bào)告
- DB31∕T 1048-2020“上海品牌”認(rèn)證通 用要求
- 意識(shí)障礙的判斷及護(hù)理
- 病理性賭博的識(shí)別和干預(yù)
- 2025年宿遷市泗陽(yáng)縣保安員招聘考試題庫(kù)附答案解析
- 校園文化建設(shè)協(xié)議合同
- 2025年廣東省中考物理試卷及答案
- 2026屆高三語(yǔ)文聯(lián)考作文題目導(dǎo)寫分析及范文:當(dāng)語(yǔ)言與真實(shí)經(jīng)驗(yàn)脫鉤
- 皮革項(xiàng)目商業(yè)計(jì)劃書
評(píng)論
0/150
提交評(píng)論