经常制作一些带有天气预报的flash,所以,干脆把相关代码提取出来,写成几个文档类。
关于webservice,本人是在是个菜鸟,从网上查的一些资料,加上自己写几句as脚本,马马虎虎可以实现相关功能。先介绍一个网址:http://www.webxml.com.cn/zh_cn/index.aspx。这个是一个免费的资源,可以获取很多有用的webservice服务。当然也有收费项目。付费的功能应该更全一些。
下面先来看看,简单的天气预报调用。(时间仓促,下面的flash仅展现代码的功能,至于它的美观性,大家不要追究了吧。)
首先是,获取IP地址的方式,在上面介绍的web服务中,可以自动获取浏览器所在的IP并根据IP获取所在地。打开http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx。然后调用getGeoIPContext这个函数就可以得到一个XML数据。由于这个函数不需要参数,因此可以直接访问http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx/getGeoIPContext。
我们可以直接采用一个简单的方式加载此xml数据,比如,用URLLoader类,直接加载此网页。代码如下:
public function getCity()
{
cityLoad=new URLLoader();
cityLoad.load(new URLRequest("http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx/getGeoIPContext"));
cityLoad.addEventListener(Event.COMPLETE, xmlLoaded);
cityLoad.addEventListener(IOErrorEvent.IO_ERROR,ioErrorEventHandler);
}
加载完毕,解析数据,得出我们所需要的内容:
private function xmlLoaded(e:Event):void
{
cityLoad.removeEventListener(Event.COMPLETE, xmlLoaded);
dress_xml = XML(cityLoad.data);
trace(dress_xml);
ip=dress_xml.children()[0];
cityname=dress_xml.children()[1].split("省")[1].split("市")[0];
trace(ip)
trace(cityname)
//获取天气情况;
getweather();
}
private function ioErrorEventHandler(e:Event):void
{
cityLoad.removeEventListener(IOErrorEvent.IO_ERROR,ioErrorEventHandler);
cityLoad.dispatchEvent(new Event("ERRORLOAD"));
}
现在,我们已经得到IP地址和所在的城市,那么我们就可以使用webservice根据所在城市查询其天气状况。webservice调用方法如下:(注:这个web使用方法是本人在网上找的,首先感谢原创作者的分享精神。)
//调用webservice
private function getweather()
{
var ws = new MyWebService("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
ws.addEventListener("callComplete", wsCompleteHandler);
ws.addEventListener("callError", wsIOErrorHandler);
function wsIOErrorHandler(e):void
{
trace(e.eventInfo.method)
e.MyEventerGC();
}
function wsCompleteHandler(e):void
{
listXML= XML(e.eventInfo.data.toString());
showWeather();//在舞台上显示天气
e.MyEventerGC();
}
ws.load("getWeatherbyCityName","theCityName="+cityname);
}
其中有几个自定义类:MyWebService.as,MyGC.as;
MyWebService.as类:
package {
import flash.net.*;
import flash.events.*;
public class MyWebService extends EventDispatcher {
private var wsUrl:String;
private var targetmethodName:String;
public function MyWebService(url:String):void {
wsUrl = url;
}
public function load(methodName:String, ...args):void {
//trace(methodName);
targetmethodName = methodName;
var param:String="";
//trace(args.length)
for (var i:int = 0; i<args.length; i++) {
if (param!="") {
param += "&"+args[i];
} else {
param = args[i];
}
}
//trace("param::"+param);
var urlLoader:URLLoader = new URLLoader();
var urlRequest:URLRequest = new URLRequest();
urlLoader.addEventListener("complete", completeHandler);
urlLoader.addEventListener("ioError", ioerrorHandler);
urlRequest.url = wsUrl + "/" + methodName;
urlRequest.method = URLRequestMethod.POST;
urlRequest.requestHeaders.push(new URLRequestHeader("Content-Type", "application/x-www-form-urlencoded"));
urlRequest.data = param;
urlLoader.load(urlRequest);
//args = null;
//MyGC.GC();
}
private function completeHandler(e:Event):void {
e.target.removeEventListener("complete", completeHandler);
e.target.removeEventListener("ioError", ioerrorHandler);
//urlLoader = null;
//urlRequest = null;
//MyGC.GC();
//trace(XML(e.target.data).toString());
MyGC.GC();
dispatchEvent(new MyEventer("callComplete", {method:targetmethodName,data:e.target.data}));
}
private function ioerrorHandler(e:IOErrorEvent):void {
e.target.removeEventListener("complete", completeHandler);
e.target.removeEventListener("ioError", ioerrorHandler);
//urlLoader = null;
MyGC.GC();
//urlRequest = null;
//MyGC.GC();
//trace(e)
dispatchEvent(new MyEventer("callError", {method:targetmethodName,data:null}));
}
}
}
import flash.events.*;
import flash.net.*;
class MyEventer extends Event {
private var info:Object;
public function MyEventer(type:String, info:Object, bubbles:Boolean = false, cancelable:Boolean = false):void {
super(type, bubbles, cancelable);
this.info = info;
}
public function get eventInfo():Object {
return this.info;
}
public function MyEventerGC():void {
this.info = null;
MyGC.GC();
}
public override function toString():String {
return formatToString("Event:","type","bubbles","cancelable","eventInfo");
}
}
MyGC.as类:
package
{
import flash.net.LocalConnection;
//import flash.system.System;
public class MyGC
{
public static function GC()
{
//trace("内存begin:"+System.totalMemory);
try {
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:*) {}
//trace("内存 end:"+System.totalMemory);
}
}
}
获取到相应的天气数据是xml格式的,自己解析下显示所需要的数据就可以了。
private function showWeather()
{
var _xml:XML=listXML;
ip_txt.text="当前IP地址为:"+ip;
city_txt.text="所在城市:"+cityname;
var kqdj:String=_xml.children()[10].split(":")[6].split(";")[0];
weather1_txt.text=_xml.children()[6].split(" ")[1];
day1_txt.text="温度:"+_xml.children()[5].toString()+"\n"+"风向:"+_xml.children()[7].toString()+"\n"+"空气等级:"+kqdj;
weather2_txt.text=_xml.children()[13].split(" ")[1];
day2_txt.text="温度:"+_xml.children()[12].toString()+"\n"+"风向:"+_xml.children()[14].toString()+"\n"+"空气等级:"+kqdj;
weather3_txt.text=_xml.children()[18].split(" ")[1];
day3_txt.text="温度:"+_xml.children()[17].toString()+"\n"+"风向:"+_xml.children()[19].toString()+"\n"+"空气等级:"+kqdj;
var load1:LoadPic=new LoadPic("http://www.webxml.com.cn/images/weather/b_"+_xml.children()[8]);
load1.loader.addEventListener("LoadPicComplete",addpic1);
function addpic1(e:Event):void
{
addChild(load1.bitmap)
load1.bitmap.x=400;
load1.bitmap.y=83.5;
}
var load2:LoadPic=new LoadPic("http://www.webxml.com.cn/images/weather/b_"+_xml.children()[15]);
load2.loader.addEventListener("LoadPicComplete",addpic2);
function addpic2(e:Event):void
{
addChild(load2.bitmap)
load2.bitmap.x=400;
load2.bitmap.y=224.5;
}
var load3:LoadPic=new LoadPic("http://www.webxml.com.cn/images/weather/b_"+_xml.children()[20]);
load3.loader.addEventListener("LoadPicComplete",addpic3);
function addpic3(e:Event):void
{
addChild(load3.bitmap)
load3.bitmap.x=400;
load3.bitmap.y=355.5;
}
}
分享到:
相关推荐
AS3是Flash中的编程语言,它支持与服务器进行HTTP通信,包括SOAP(Simple Object Access Protocol)协议,这是大多数WebService使用的标准协议。在AS3中,我们可以使用URLLoader和URLRequest类来发送HTTP请求,并...
在本项目“Flex调用Webservice实现天气预报”中,我们将探讨如何使用Flex作为客户端,通过调用Webservice接口来获取并显示实时的天气信息。这涉及到以下几个关键技术点: 1. **Flex中的HTTPService组件**:Flex提供...
在本文中,我们将深入探讨如何使用Adobe Flex调用Web Service来开发一个天气预报服务。Flex是一种基于MXML和ActionScript的开源框架,用于构建富互联网应用程序(RIA)。它允许开发者创建交互性强、用户体验良好的...
标题中的"Flash2WebService.rar_flash_flash webservice"表明这是一个关于使用Flash与Java Web Service交互的教程或资源包。描述进一步证实了这一点,提到"FLASH连接JAVA WEBSERVICE",这通常涉及利用ActionScript...
### 纯AS3下访问WebService方法总汇 在Adobe Flash Platform中,ActionScript 3 (AS3) 提供了多种方法来实现客户端与服务器之间的交互。...希望这些示例能帮助您更好地理解和实现AS3与Web Service的交互。
2. **AS3与SOAP通信**: 对于基于SOAP的Web服务,AS3使用URLVariables和URLRequest对象发送POST请求。首先,我们需要将SOAP请求构建成一个XML字符串,然后使用`URLRequest`对象的`data`属性设置这个字符串。接着,...
综上所述,"flex+as3 聊天及wsdl通信"的主题涵盖了Flex应用开发、AS3编程、Socket通信以及与WSDL服务的集成等多个知识点。通过学习和实践这些技术,开发者可以构建出功能丰富的实时通信应用。提供的源码文件是进一步...
对于SOAP服务,我们可以使用Flex的`WebService`组件,它自动生成与WSDL(Web服务描述语言)文件对应的AS3接口。对于REST服务,我们可以使用`HTTPService`组件。 2. **配置WebService组件** - 添加`<s:WebService>`...
通过分析和学习Flex WebService Demo,开发者可以了解如何在Flex应用中实现与服务器的无缝通信,这对于创建动态、交互性强的RIA至关重要。同时,这个Demo还可能演示了如何处理异步调用、数据转换、以及如何将服务器...
AS3提供了XMLSocket、HTTPService、WebService和RemoteObject等类,用于与远程服务器进行通信。在本例中,我们主要关注的是WebService类,它支持SOAP协议,能够调用.NET Web服务中的方法。 1. **SOAP通信**: SOAP...
ActionScript 3作为Flash Player和Adobe AIR平台的核心编程语言,相比于之前的版本AS2,具有更强的类型系统、更好的性能以及对面向对象编程的全面支持。AS3的这些提升使得Flex2成为了企业级应用开发的首选工具。 ...
- 自动生成AS3类:Flex会根据WSDL生成与Web服务方法相对应的AS3类,这些类可以直接在Flex代码中调用。 - 使用WebService组件:在MXML文件中,拖拽一个WebService组件到设计视图,设置其id和服务名,对应生成的AS3...
与之前的ActionScript版本相比,AS3提供了更严谨的类型系统和错误检查,这使得代码更加稳定和可靠。 Flex 3框架提供了丰富的组件库,包括各种用户界面元素,如按钮、列表、表格等,以及数据绑定和事件处理机制。...
标题中的“jdk6 jboss5 webservice bug”指的是在Java Development Kit (JDK) 版本6和JBoss Application Server (AS) 版本5中出现的一个与Web服务(WebService)相关的错误。Web服务是一种在分布式环境中交换数据和...
3. **MXML**:一种标记语言,可以与AS3.0代码混合使用,用于声明式创建用户界面和应用程序结构。 4. ** Cairngorm、PureMVC等设计模式**:Flex社区提供了多种框架和设计模式,如Cairngorm和PureMVC,帮助开发者实现...
Flex AS支持与服务器进行数据交换,使用XMLSocket、HTTPService、WebService等类可以轻松实现AJAX风格的异步数据请求。此外,AMF(Action Message Format)提供了一种高效的数据传输方式,常用于Flex应用与服务器...
AS3.0(ActionScript 3.0)是Adobe Flash Platform中的主要编程语言,用于创建交互式内容、富互联网应用程序(RIA)、桌面应用程序以及移动应用程序。这个“AS3.0教程,中文版”针对的是想要深入学习Flex开发的中文...
调试BlazeDS与Flex的通信可以使用Flash Builder的内置调试工具,查看网络请求和响应。同时,可以通过配置BlazeDS的日志输出来获取更详细的错误信息,帮助诊断问题。 总之,BlazeDS为Flex和Java应用程序间的通信...
8. **Flex Builder与Flex SDK**:Flex Builder(现为Flash Builder)是一个集成开发环境,提供了代码提示、调试和部署工具。了解如何使用Flex SDK和Builder能提升开发效率。 9. **状态管理与皮肤定制**:Flex允许你...