Flex实例【Shangle.net】解析【六】

        前面“解析五”中我们已经实现了评论的实际功能,但是目前的评论的内容都是存储在一个变量当中,当我们重新加载该应用时又要重新开始,这个肯定不是我们所希望的。我辛辛苦苦打了这么多字,就这么没了,真当是“挥一挥衣袖,不带走一片云彩”,我们要“雁过留声,人过留名”。所以我们需要立刻上马一个新课题:如何将评论内容给保存下来?

        一般来说我们要保存数据的话,要么存到一些文本类文件中去,要么存到数据库中去。数据库相对而言更加的优秀,但是我们这里暂时先舍弃掉,因为它涉及到的东西貌似多了点,所以我们先用文本类文件来试试水。那么文本类文件有什么好选择呢?存到TXT文件中去?也不是不行,不过这个到时候解析啊,移植啊什么的比较麻烦,所以我们优先考虑XML这个比较特殊的文本类文件。(为什么说特殊自己百度)

        那么首先我们先建好一个包含数据的XML文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<commentList>
	<commentItem>
		<commentID>1</commentID>
		<diaryID>1</diaryID>
		<floor>1</floor>
		<nickName>cly</nickName>
		<reFloor>0</reFloor>
		<reNickName></reNickName>
		<content>不错</content>
		<addTime>2014年5月13日 20:22:14</addTime>
	</commentItem>
</commentList>
        具体XML的文件格式就自己去搞明白吧。这个看懂应该没问题哦。这里就是要注意个编码用UTF-8,主要为了中文的缘故。

        然后将该文件保存至FLEX应用的输出目录,一般都是bin-debug文件夹中。这样我们就有了数据文件,接下来就是围绕这个数据文件做文章啦(文章:还念念不忘我啊,我错了……)

        我们的目的就是读出评论和写入评论呢,所以我们主要就是研究下FLEX读写XML文件的内容,这个其实网上找下很多很多,我们先来讨论读,至于写我给学生布置了思考题,但是就反馈情况来说极其不乐观,我想我布置的难了,检讨ING……(但我就是知错不改……^O^)。

        我们这里讨论两种读XML的方法,一种是利用FB环境鼠标点点就能实现的,一种呢是挺苦逼的代码模式,男神PK屌丝,屌丝完胜,因为更接地气,我喜欢,学生也只能喜欢了……拉仇恨的话不讲了,进入正题。

        方式一:首先不要忘记我们现在是在编辑哪个模块?DiaryModule.mxml。然后在FB中有个“数据”菜单,选择“连接XML……”,然后选“本地文件”(至于另外一个URL暂且放过,养肥再杀),然后我们加载了本地的XML文件后选择节点,如果XML文件内容如上所示,那么节点即为commentItem,同时这个应该是数组,因为后面会有多个Item。这样我们就连接到了该XML文件,最后选择需要显示数据的列表控件,这里是:

<s:List id="commentList" skinClass="net.shangle.skins.CommentListSkin" height="308" width="250" itemRenderer="net.shangle.renderers.CommentListRenderer"
						creationComplete="assignCommentListListener()"/>
        然后右击该控件,选择“绑定到数据“,然后后面的操作你们明了哦……这就是男神,不多说,不解释!

        方式二:代码模式开启,学霸模式开启。这里我们需要用到三个额外的对象,URLRequest、URLLoader和XML及相关。

URLRequest:URLRequest 类可捕获单个 HTTP 请求中的所有信息。URLRequest 对象将传递给 Loader、URLStream 和 URLLoader 类的load() 方法和其他加载操作,以便启动 URL 下载【官方API解释

URLLoader:URLLoader 对象会先从 URL 中下载所有数据,然后才将数据用于应用程序中的代码。它会发出有关下载进度的通知,通过 bytesLoadedbytesTotal 属性以及已调度的事件,可以监视下载进度。【官方API解释

XML:XMLDocument、XMLNode、XMLList、XMLListCollection,在网上查到说现在已经用XMLNode来取代原先的XML对象,但是又从网上查到的很多实例还是使用XML对象来操作,所以这里还是沿用旧的操作,有时间再捣鼓新东西吧。

        基本过程用文字描述就是:使用URLRequest对象来指定加载的文件、使用URLLoader对象来加载文件内容、使用XML及相关对象来格式化内容以便用于LIST列表控件的DataProvider。

        代码描述如下:

xmlRequest=new URLRequest("data/commentList.xml");
xmlLoader=new URLLoader(xmlRequest);
xmlLoader.addEventListener(Event.COMPLETE,xmlReadCompleteHandle);
        这里使用URLLoader构造函数时直接传入URLRequest对象就相当于一个load的加载过程。同时因为这个过程是异步传输,所以如果直接在这三行代码下面去获取XML内容可能会空,所以我们需要监听URLLoader对象的完成事件,这里就添加了一个事件监听,监听的是COMPLETE事件,指定了一个自定义函数来处理该事件——xmlReadCompleteHandle。该函数的具体代码如下:

private function xmlReadCompleteHandle(e:Event):void 
{ 
  try{
    commentXML=new XML(xmlLoader.data);
    dataSource=new XMLListCollection(new XMLList(commentXML.commentItem));
    commentList.dataProvider=dataSource.list;
    xmlLoader.removeEventListener(Event.COMPLETE,xmlReadCompleteHandle);
  }catch(ex:Error)
  {
    Alert.show(ex.message);
  }
}
        这里我们使用了try...catch...模式,因为读取外部文件可能会发生一些意料外的错误,所以我们就捕获到异常,并简单的ALERT出来,方便调试。【补充, 错误代码意义

        在这个完成事件监听函数中,我们利用URLLoader的data属性来获取到加载的XML内容,然后用个XML类型的对象commentXML来接受并转换为XML对象。然后通过commentXML对象的commentItem属性(该属性就是XML文件中的一个个ITEM节点名,其中根节点是commentList,下面有多个子节点commentItem)。然后将这些多个子节点转换为XMLList,再到XMLListCollection。然后将这个XMLListCollection的list属性作为list列表控件的dataProvider。

        最后移除事件监听。

        其实上面的一些代码也是自己摸索调试出来的,也许不是那么的规范,但是我们现在的首要任务是实现它,然后才能去优化它。

【待续】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值