flash通信教程之URLLoader类

学习之前少不了看API啦。
Load一词英语中有加载,装载之意。在这里我们装载的是数据不是货物,嘿嘿。URLLoader和Loader可不同,大家不要混,他们压根不再一个包里,Loader是显示对象,这样就不会混了。带URL前缀的肯定和通信有关联了:-).
URLLoader用了从URL中加载数据,相比前面的2个函数而言,这可是个重量级东东,它不仅仅加载数据那么简单,它还容许我们监视整个数据加载过程,这点很像Loader对象。
偷个懒,放上构造函数的签名:
URLLoader () 构造函数
public 函数 URLLoader(request:URLRequest = null)
大家看到,这个构造函数待着一个可选的参数,是一个请求对象,我们可以在构建URLLoade对象时传进URL地址,当然也可以省掉,通过load方法随时启动我们的加载,通常这种方式用的要多一点。
有一个属性不得不说,dataFormat 属性 指定接收的数据的格式是期望文本,二进制还是url编码的值对的方式。
这个属性期望一个字符串值,不过最好采用flash提供的3个常量-URLLoaderDataFormat.TEXT,URLLoaderDataFormat.BINARY,URLLoaderDataFormat.VARIABLES。
而接受到的数据放在data属性里。
今天我们先来看看如何从文本文件加载数据,默认的格式就是文本。
1.新建flash文件保存,并在同目录下新建一个文本文件test1.txt,内容随便打上一段话"这是一段测试文本".
2.创建一个动态文本实例名mytxt
3.组件面板拖动一个按钮实例名btn
4.动作面板
我们想在单击按钮时把文本文件内容加载到动态文本框里。所以为按钮添加单击事件
btn.addEventListener(MouseEvent.CLICK,loadTxt);
function loadTxt(evt:MouseEvent):void
{
        var urlLoader:URLLoader=new URLLoader();
        urlLoader.load(new URLRequest("test1.txt"));
        urlLoader.addEventListener(Event.COMPLETE,finish);
}
注意由于flash是异步的所以在执行load后会继续执行后面的代码而不会等待数据加载,所以不能直接获取到数据,需要监听完成事件,在里面读数据:
function finish(evt:Event):void
{
        mytxt.text=(evt.currentTarget as URLLoader).data;
}
好了,试试吧,单击后发现读出了数据。
注:如果记事本里中文,是不是乱码了,别急,听我慢慢讲:
flash默认是按unicode方式读数据,而记事本默认是ANSI(ASCII)编码方式存储的数据,这样中文占2个字节,而如果采用UTF8编码中文字符占3个字节的。好了看第一种方法:
System.useCodePage默认是false,不采用代码页说白了不用系统的这种ANSI编码方式,按unicode方式读,想想吧用Unicode方式读ANSI的编码不乱才怪,于是用System.useCodePage=true;试试,果然可以了。
第二种方式:既然记事本默认ANSI,我们另存一下,选择编码方式为UTF8,而System.useCodePage用默认的false.看看是不是也可以。
通常我都用UTF8.


我们说过
dataFormat 属性   
public var dataFormat:String = "text"
默认是"text"文本,所以之前我们没有明确指定使用的默认的。
今天看看URL编码变量方式URLLoaderDataFormat.VARIABLES。
类似这样的a=123&b=12&c=88
注意data属性:
如果 dataFormat 属性是 URLLoaderDataFormat.VARIABLES,则所接收的数据是一个包含 URL 编码变量的 URLVariables 对象。

为了简单起见,还是用前面的例子。
btn.addEventListener(MouseEvent.CLICK,loadTxt);
function loadTxt(evt:MouseEvent):void
{
        var urlLoader:URLLoader=new URLLoader();
        urlLoader.dataFormat=URLLoaderDataFormat.VARIABLES;        
        urlLoader.load(new URLRequest("test.txt"));
        urlLoader.addEventListener(Event.COMPLETE,finish);
}
function finish(evt:Event):void
{
        var mydata:URLVariables=URLVariables((evt.currentTarget as URLLoader).data);
                mytxt.text="国家是:"+mydata.state+"\n";
                mytxt.text+="var1是:"+mydata.var1;

}
注:test.txt的内容为
state=中华人民共和国&var1=我+爱+你

posted @ 2011-01-15 18:26  rob_2010  阅读(624)  评论(0编辑  收藏  举报