`

Flex与Java低数据量通信息二:URLLoader及非视图组件的事件发布订阅

    博客分类:
  • Flex
阅读更多

该实例使用URLLoader向服务器获取XML和txt(properties格式数据)数据,由于获取数据由URLLoader完成,我将些操作单独放到另一个as文件中,故与视图组件分开,那么如何通告视图组件已完成数据加载功能呢?我在自己的as文件中自定义了一个事件,当URLLoader完成数据加载时,发布自定义的事件并将数据随事件一起分布,再在视图组件中订阅自定义的事件。

 

一、先来认识一下URLLoader:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
				layout="absolute" fontSize="12" backgroundGradientAlphas="[1.0, 1.0]" 
				backgroundGradientColors="[#FB7305, #FAE605]" width="621" height="385">	
	<mx:Script>
		<![CDATA[
			import com.mengya.URLLoaderTxt;
			
			internal function doTXT():void{
				var urlLoaderTxt:URLLoaderTxt = new URLLoaderTxt();
			}			
		]]>
	</mx:Script>
	<mx:Button x="49" y="40" label="测试URLLoader,读取文本" width="193" height="30" click="doTXT();"/>
</mx:Application>

 URLLoaderTxt 类如下:

package com.mengya{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.IEventDispatcher;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLVariables;
	
	public class URLLoaderTxt extends Sprite {
		public function URLLoaderTxt(){
			var loader:URLLoader = new URLLoader();
			//订阅URLLoader的事件
			configListeners(loader);
			var request:URLRequest = new URLRequest("myTxt.txt");
			loader.load(request);
		}
		private function configListeners(dispatcher:IEventDispatcher):void {
			dispatcher.addEventListener(Event.COMPLETE,loaderComplete);
			dispatcher.addEventListener(Event.OPEN,openLoader);
		}
		private function loaderComplete(event:Event):void {
			var urlLoader:URLLoader = URLLoader(event.target);
			trace(urlLoader.data)
			var urlVariables:URLVariables = new URLVariables(urlLoader.data);
			trace(urlVariables.msg);
		}
		private function openLoader(event:Event):void{
			trace("打开连接");
		}
	}
}

 

对URLLoader功能有初步的认识以后完成以上的功能,如下:

mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
				layout="absolute" fontSize="12" backgroundGradientAlphas="[1.0, 1.0]" 
				backgroundGradientColors="[#FB7305, #FAE605]" width="621" height="385"
				applicationComplete="initApp();">	
	<mx:Script>
		<![CDATA[
			import com.mengya.LoadFinishEvent;
			import com.mengya.URLLoaderXML;
			
			[Bindable]
			private var dp:XMLList;
						
			internal function initApp():void{
				//添加自己定义的数据加载完成事件
				URLLoaderXML._eventDispatcher.addEventListener(LoadFinishEvent.LOADFINISHED,onLoadFinished);				
			}
			internal function doXML():void{
				var urlLoaderXML:URLLoaderXML = new URLLoaderXML();
			}
			internal function onLoadFinished(event:LoadFinishEvent):void{
				dp = new XMLList(event.data);
			}

		]]>
	</mx:Script>
	<mx:Button x="49" y="88" label="测试URLLoader,读取XML" width="193" height="30" click="doXML();"/>
	<mx:DataGrid x="49" y="147" width="529" height="193" dataProvider="{dp}">
		<mx:columns>
			<mx:DataGridColumn headerText="姓名" dataField="name" fontFamily="宋体" resizable="true"/>
			<mx:DataGridColumn headerText="电话" dataField="phone" fontFamily="宋体" resizable="true"/>
			<mx:DataGridColumn headerText="邮箱" dataField="email" fontFamily="宋体" resizable="true"/>
		</mx:columns>
	</mx:DataGrid>
</mx:Application>

 自定义事件类LoadFinishEvent如下:

package com.mengya{
	import flash.events.Event;
	//自己定义一个事件,用于发布数据加载完成,将加载完数据随事件一起发布
	public class LoadFinishEvent extends Event{
		public static const LOADFINISHED:String = "Loadfinished";
		public var data:String;
		public function LoadFinishEvent(type:String,
										data:String,
										bubbles:Boolean=false,
										cancelable:Boolean=false){
			this.data = data;
			super(type,bubbles,cancelable);
		}
	} 
}

 

完成发布自定义的事件的类如下:

package com.mengya
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	
	//这是一个非视图组件,在向服务器获取数据后发布一个自定义的事件,并将数据随着事件一起发布
	public class URLLoaderXML extends Sprite{
		
		public static var _eventDispatcher:EventDispatcher = new EventDispatcher();
				
		public function URLLoaderXML(){
			var loader:URLLoader = new URLLoader();
			//配置对URLoader的事件订阅
			configureListeners(loader);
			var request:URLRequest = new URLRequest("XMLFile.xml");
			try{
				//获取指定的XML数据
				loader.load(request);
			}catch(error:Error){
				trace(error.message);
			}		
		}
		
		private function configureListeners(dispatcher:IEventDispatcher):void{
			//订阅了URLLoader的Event.COMPLETE事件,表示加载完成
			dispatcher.addEventListener(Event.COMPLETE,completeHandler);
		}
		
		public function completeHandler(event:Event):void{
			var urlloader:URLLoader = URLLoader(event.target);
			//urlloader.data已包含加载来的数据
			trace(urlloader.data);
			//发布自定义的事件,并将所加载完成的数据随事件一起发布,用于在视图组件订阅捕获
			var evt:LoadFinishEvent = new LoadFinishEvent(LoadFinishEvent.LOADFINISHED,
														  urlloader.data);	
			_eventDispatcher.dispatchEvent(evt);
		}
	}
}

 

0
0
分享到:
评论

相关推荐

    Flex之URLLoader加载XML

    在Flex开发中,`URLLoader` 是一个非常重要的类,用于加载远程数据,如XML、JSON等。在本示例中,它被用来从服务器获取XML文件并将其内容解析为XML对象,以便在应用程序中使用。`Flex` 是Adobe开发的一个开放源代码...

    用Flex+Java进行软件开发速成篇

    - **AMF**: 是一种二进制格式,通常用于Flex与Java之间高效的数据交换。 - **JSON**: 适用于跨平台和跨语言的数据交换,易于读写且格式简洁。 ##### 3. 通信示例 - **Flex端**: 使用`URLLoader`类加载远程数据。 - ...

    flex与java通讯,URL,HTTPService,Socket

    Flex与Java之间的通信是开发跨平台应用程序时的关键技术,它允许客户端(通常为Flex应用程序)与服务器端(通常是Java应用程序)进行数据交换。本篇将深入探讨几种主要的通信方式:URLLoader,HTTPService和Socket。...

    Flex与后台交互的方法_HTTPService_WebService_URLLoader

    URLLoader是Flex中的另一个数据加载组件,主要用于加载非二进制的文本数据,如HTML、XML、JSON等。与HTTPService相比,URLLoader更轻量级,但不支持自动序列化和反序列化。使用URLLoader,开发者需要手动处理数据...

    Flex与Servlet之间数据的交互

    Flex与Servlet之间的数据交互是JavaWeb开发中的一个重要环节,它涉及到客户端富互联网应用程序(RIA)与服务器端数据处理的协同工作。Flex作为一个基于Adobe Flash Player的前端开发框架,主要用于创建具有丰富用户...

    flex与PHP数据交互教程

    - Ajax(Asynchronous JavaScript and XML)非同步JavaScript和XML,允许在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。在Flex中,我们可以使用URLLoader类来实现类似Ajax的效果,发送异步HTTP请求...

    URLLoader动态加载XML

    在ActionScript 3 (AS3)中,`URLLoader` 类是用于加载各种类型数据的强大工具,包括XML。XML(eXtensible Markup Language)...总的来说,`URLLoader`与XML的结合使得在Flash或Flex项目中处理远程数据变得简单而灵活。

    flex Java通信

    Flex与Java通信是一种常见的跨平台应用开发技术,它允许使用Adobe Flex前端展示层与Java后端业务逻辑进行交互。Flex是一种基于ActionScript的开放源代码框架,用于构建富互联网应用程序(RIA),而Java则是一种广泛...

    Flex文件上传的组件

    1. **组件库**:Flex SDK提供了许多内置组件,如Button、Label、ProgressBar等,我们可以利用这些组件来构建文件上传的界面。例如,Button用于触发文件选择,ProgressBar用于显示上传进度。 2. **FileReference类**...

    flex实现的bullBreaker小游戏(flash swf版本)

    很久之前无聊的时候用flex实现的一个BullBreaker小游戏,点击小球可消除周围同色小球,可以回滚操作至起始状态。swf格式的可以直接在视频播放器中打开来玩,也可以打开html文件在浏览器中玩(需要flash支持)。

    Flex文件上传组件

    Flex文件上传组件是一种基于Adobe Flex技术的用户界面组件,用于在Web应用中实现文件上传功能。Flex是一个开源的RIA(富互联网应用)框架,它允许开发者创建交互性强、图形丰富的Web应用。在这个组件中,用户可以...

    Flex拍照并上传到java后台——未调试成功

    标题中的“Flex拍照并上传到java后台——未调试成功”表明这是一个关于使用Adobe Flex技术进行拍照功能实现,并将拍摄的照片上传到Java后端服务器的项目,但目前该项目可能在调试阶段遇到了问题。Flex是一种用于创建...

    Flex Service

    总结,Flex Service 的核心在于通过Flex强大的可视化组件和灵活的数据绑定机制,与PHP或Java等后端语言协同工作,构建出高性能、用户体验优秀的富互联网应用。无论是通过SOAP还是REST,或者是更高效的AMF通信,都能...

    Flex使用JSON格式与Java通信

    标题中的“Flex使用JSON格式与Java通信”是指在开发富互联网应用程序(Rich Internet Application, RIA)时,采用Adobe Flex作为前端技术,通过JSON(JavaScript Object Notation)数据交换格式与后端Java服务器进行...

    AS3 中使用 URLRequest 和 URLLoader 与服务器交互

    在Adobe Flash Professional CS5或更新版本的环境中,ActionScript 3(AS3)提供了一套强大的网络通信工具,包括`URLRequest`、`URLLoader`等类,这些类替代了早期版本中的`LoadVars`方法,使得与服务器的交互更加...

    Rss.zip_flex

    2. **数据绑定**:Flex的数据绑定机制允许我们轻松地将XML数据绑定到UI组件上,从而实时更新用户界面。 3. **组件库**:Flex提供了丰富的组件库,如`List`、`DataGrid`等,可以用于展示订阅的RSS条目。 4. **事件...

    Flex 指定文件下载 带进度条

    URLLoader允许我们加载各种类型的数据,包括文本、XML、JSON等,并且能够处理二进制数据,这使得它非常适合用来下载文件。 下载过程通常分为以下几个步骤: 1. 创建URLLoader对象:这是下载文件的起点,我们需要...

    Flex与后台交互的几种方法详解

    根据提供的标题、描述、标签及部分内容,本文将详细介绍Flex与后台进行交互的三种主要方法:通过FlashVars传递参数、利用HttpService服务以及采用URLLoader组件。这些方法在Flex开发中非常常见,对于实现数据的前后...

Global site tag (gtag.js) - Google Analytics