Flex調(diào)用Webservice實現(xiàn)天氣預報
你對Flex調(diào)用Webservice實現(xiàn)天氣預報的方法是否熟悉,這里和大家分享一下,F(xiàn)lex調(diào)用Webservice有多種方法,可以通過ActionScript中Webservice類來實現(xiàn)。還有就是使用<Webservice>組件實現(xiàn)。
Flex調(diào)用Webservice實現(xiàn)天氣預報
Flex調(diào)用Webservice有多種方法,可以通過FlexBuilder提供的管理Webservices的工具解析WSDL文檔生成本地調(diào)用類。也可以通過ActionScript中Webservice類來實現(xiàn)。還有就是使用<Webservice>組件實現(xiàn)。這次我使用的是最后一種,感覺這種方法較為簡潔。
1.構(gòu)建界面
用于接受用戶輸入及結(jié)果輸出。包括:1個Text輸入組件,1個按鈕組件,10個標簽組件
2.添加Webservice組件
根據(jù)Web服務(wù)提供者的說明,構(gòu)建Webservice組件。代碼如下:
- <mx:WebServiceidmx:WebServiceid="ws"wsdl="http://www.webxml.com.cn/
- WebServices/WeatherWebService.asmx?wsdl"
- useProxy="false"showBusyCursor="true">
- <mx:operationnamemx:operationname="getWeatherbyCityName"
- result="resultOK()">
- <mx:request>
- <theCityName>
- {city.text.toString()}
- </theCityName>
- </mx:request>
- </mx:operation>
- </mx:WebService>
注意:operation組件中的name屬性需要和待使用的方法的名字相同。result的屬性是在調(diào)用方法成功后執(zhí)行的ActionScript方法。operation還有其他屬性,鑒于例子很簡單,就不一一使用了。
3.編寫ActionScript方法
本例中使用了三個方法:resultOK()用于顯示結(jié)果的,showMessage()用于顯示說明,getfocus()用于當輸入欄得到焦點時清空輸入欄內(nèi)容的。下面是resultOK()的分析:
- publicfunctionresultOK():void{//顯示接受的結(jié)果
- arrayResult=newArrayCollection();
- arrayResult=ws.getWeatherbyCityName.lastResult;
- //顯示今天的情況
- jin1.text=arrayResult[6].toString().substring(0,arrayResult[6].toString().indexOf(""));
- jin2.text=arrayResult[6].toString().substring((arrayResult[6].toString().indexOf(""))+1);
- jin3.text=arrayResult[5];
- jin4.text=arrayResult[7];
- //顯示明天的情況
- ming1.text=arrayResult[13].toString().substring(0,arrayResult[13].toString().indexOf(""));
- ming2.text=arrayResult[13].toString().substring((arrayResult[13].toString().indexOf(""))+1);
- ming3.text=arrayResult[12];
- ming4.text=arrayResult[14];
- //顯示后天的情況
- hou1.text=arrayResult[18].toString().substring(0,arrayResult[18].toString().indexOf(""));
- hou2.text=arrayResult[18].toString().substring((arrayResult[18].toString().indexOf(""))+1);
- hou3.text=arrayResult[17];
- hou4.text=arrayResult[19];
- }
在使用Web服務(wù)返回的結(jié)果時,發(fā)現(xiàn)其結(jié)果保存在字符數(shù)組中的,在WSDL中是ArrayOfString,而Flex沒有這種格式,在試過String,Array類型后,發(fā)現(xiàn)ArrayCollection類可以使用。然后就是顯示結(jié)果,可根據(jù)WSDL說明來挑選信息。
4.使用按鈕調(diào)用Webservice組件,發(fā)送Web服務(wù)信息。
即調(diào)用ws.getWeatherbyCityName.send()方法。
◆編譯發(fā)布swf文件
求助:在使用swf文件的時候有這樣的問題,不曉得怎么把flex導出的swf嵌入Html中。普通的嵌入,不能實現(xiàn)調(diào)用Web服務(wù)的功能,使用項目生成的文件包中的Html文件倒是可以,但是如果把文件包復制出來,放到另外的地方,又無法使用Web服務(wù)了。那位高手能夠給予幫助,在下將不勝感激。
完整代碼如下:
- <?xmlversionxmlversion="1.0"encoding="gb2312"?>
- <mx:Applicationxmlns:mxmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"width="330"
- height="155"layout="absolute"fontSize="12"viewSourceURL="srcview/index.html">
- <mx:Script>
- <![CDATA[
- importmx.controls.Alert;
- importmx.collections.ArrayCollection;
- publicvararrayResult:ArrayCollection;//保存接收到的結(jié)果
- publicfunctionresultOK():void{//顯示接受的結(jié)果
- arrayResult=newArrayCollection();
- arrayResult=ws.getWeatherbyCityName.lastResult;
- //顯示今天的情況
- jin1.text=arrayResult[6].toString().substring(0,arrayResult[6].toString().indexOf(""));
- jin2.text=arrayResult[6].toString().substring((arrayResult[6].toString().indexOf(""))+1);
- jin3.text=arrayResult[5];
- jin4.text=arrayResult[7];
- //顯示明天的情況
- ming1.text=arrayResult[13].toString().substring(0,arrayResult[13].toString().indexOf(""));
- ming2.text=arrayResult[13].toString().substring((arrayResult[13].toString().indexOf(""))+1);
- ming3.text=arrayResult[12];
- ming4.text=arrayResult[14];
- //顯示后天的情況
- hou1.text=arrayResult[18].toString().substring(0,arrayResult[18].toString().indexOf(""));
- hou2.text=arrayResult[18].toString().substring((arrayResult[18].toString().indexOf(""))+1);
- hou3.text=arrayResult[17];
- hou4.text=arrayResult[19];
- }
- //顯示說明
- publicfunctionshowMessage():void{
- varalert:Alert=Alert.show("請輸入城市中文名稱(國外城市可用英文)。web服務(wù)來源于http://www.webxml.com.cn,數(shù)據(jù)來源于中國氣象局"+
- ",包括340多個中國"+
- "主要城市和60多個國外主要城市三日內(nèi)的天氣情況。作者EMAIL:anhulife@gmail.com","說明",Alert.YES);
- }
- //處理當輸入欄獲得焦點時,輸入欄清空
- publicfunctiongetfocus():void{
- city.text="";
- }
- ]]>
- </mx:Script>
- <mx:WebServiceidmx:WebServiceid="ws"wsdl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl"
- useProxy="false"showBusyCursor="true">
- <mx:operationnamemx:operationname="getWeatherbyCityName"result="resultOK()">
- <mx:request>
- <theCityName>
- {city.text.toString()}
- </theCityName>
- </mx:request>
- </mx:operation>
- </mx:WebService>
- <mx:TextInputidmx:TextInputid="city"text="請輸入城市名,支持國內(nèi)外主要城市"
- width="200"x="10"y="10"focusIn="getfocus()"fontSize="12"color="#909697"/>
- <mx:Buttonidmx:Buttonid="check"x="230"y="10"label="查詢"click="ws.getWeatherbyCityName.send()"/>
- <!--顯示結(jié)果的Label-->
- <mx:Labelxmx:Labelx="10"y="42"text=""width="90"id="jin1"/>
- <mx:Labelxmx:Labelx="10"y="70"text=""width="90"id="jin2"/>
- <mx:Labelxmx:Labelx="10"y="98"text=""width="90"id="jin3"/>
- <mx:Labelxmx:Labelx="10"y="126"text=""width="90"id="jin4"/>
- <mx:Labelxmx:Labelx="120"y="42"text=""width="90"id="ming1"/>
- <mx:Labelxmx:Labelx="120"y="70"text=""width="90"id="ming2"/>
- <mx:Labelxmx:Labelx="120"y="98"text=""width="90"id="ming3"/>
- <mx:Labelxmx:Labelx="120"y="126"text=""width="90"id="ming4"/>
- <mx:Labelxmx:Labelx="230"y="41"text=""width="90"id="hou1"/>
- <mx:Labelxmx:Labelx="230"y="69"text=""width="90"id="hou2"/>
- <mx:Labelxmx:Labelx="230"y="97"text=""width="90"id="hou3"/>
- <mx:Labelxmx:Labelx="230"y="125"text=""width="90"id="hou4"/>
- <!--顯示說明的Label-->
- <mx:Labelxmx:Labelx="288"y="12"text="說明"width="32"textDecoration="underline"color="#FAFBFB"click="showMessage()"/>
- </mx:Application>
想學習Webservice,所以先研究一下Flex怎么調(diào)用WebService.看了這篇文章感覺不錯,先測試一下。
【編輯推薦】
- 學習筆記 用Flash和Flex創(chuàng)建WebService客戶端
- 深入剖析Flex字體樣式定義方法
- 全面認識Flex應(yīng)用程序的六大元素
- 揭開Flex正則表達式的神秘面紗
- Flex數(shù)據(jù)綁定及其使用頻繁的幾種情況