让Adobe AIR 程序离线运行(翻译) |
| [来源:zhuoqun.net | 作者:Dreamer | 时间:2008-04-04 | 点击: | 收藏本文 【大 中 小】] |
|
3.尝试加载XML文件(或者加载你需要的任何文件/数据)
现在程序可以确定连接状态了,我们的监听器函数将会相应地对isOnline变量做更改。注意onNetworkChange()方法很少将isOnline的值置反,处理这个的一种较好的方法就是同时访问一下服务器来确定连接状态。
现在NETWORK_CHANGE事件关联了很多东西,正如上面所说,当你从在线状态变成离线状态的时候会触发该事件,但是当你连接到VPN或其它状态改变的时候也会触发该事件。记住,服务器两次检查在线状态的时候可能会离线,这会使数据加载数据失败,导致程序显示为离线状态。希望下一个版本中的网络更新会改进这一过程。
现在NETWORK_CHANGE事件关联了很多东西,正如上面所说,当你从在线状态变成离线状态的时候会触发该事件,但是当你连接到VPN或其它状态改变的时候也会触发该事件。记住,服务器两次检查在线状态的时候可能会离线,这会使数据加载数据失败,导致程序显示为离线状态。希望下一个版本中的网络更新会改进这一过程。
以调试模式运行上面的代码,然后在连接状态和无连接状态观察控制台(Console)视图。
 图2. 连接状态和无连接状态下的控制台视图
创建一个基于状态的程序
现在我们已经知道了连接状态而且仅仅需要我们的程序相应地作出响应。现在你要做的是将currentState属性绑定到isOnline变量来获得所需的效果或流程。
改变程序的状态
在这里我假定你很熟悉Flex 2中的绑定,所以对这些基础就一带而过了。这里我们要做的是根据isOnline的值切换状态。
[Code (snippet; AIROffline_Step3.mxml)] <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" currentState="{isOnline ? 'Online' : 'Offline'}"> [/Code]
你需要注意的是currentState 那一行。它告诉我们在线或离线状态的改变是基于isOnline变量的。很简单,是不是?现在让我们来创建各个状态。
[Code (snippet; AIROffline_Step3.mxml)] <mx:states> <mx:State name="Online"> <mx:SetProperty name="status" value="Online"/> </mx:State> <mx:State name="Offline"> <mx:SetProperty name="status" value="Offline"/> </mx:State> </mx:states> [/Code]
在每个状态中,我们仅仅改变了WindowedApplication.status 的值来显示当前的状态。对于习惯图形化界面表示的你来说,可能想让我根据状态用灰色或全彩色来表示网络连接,好吧,我将添加一个状态条来满足你的图形化要求。接下来让我们处理数据。
管理数据
我们已经可以知道当前的状态是什么了,现在需要做的就是处理数据。首先让我们看一下需要做的事情以及想要的结果。
•如果是离线状态,加载本地数据文件。 •如果是在线状态,加载线上的数据文件并将其保存在本地,为将来离线加载做准备。(如果加载数据失败,就回过头来加载本地数据文件) •如果网络状态从离线变成在线,就加载线上数据并重复上一步。 •结果:程序自动更新数据(通过绑定),而且不管状态如何数据一直是可用的。
大部分的代码都和上面的差不多,这里我只给出一些代码片断以便你更清楚地看到是哪里做了更改。
[Code (snippet; Script block; AIROffline_Step4.mxml)] import flash.filesystem.*; private var localFile:File = File.appStorageDirectory.resolve("AIROffline/rooms.xml"); |
| 上一页 1 2 34 5 6 7 8 下一页 |
| 文章如果有错误或者缺少文件,请发邮件提交给我们 |
|
|
|
|
|
|
|
| >>> 最新评论:(共有 0 位网友发表了评论) 查看所有评论 |
|
|
| 发表评论 |
|
| ·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂 |
| ·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任 |
| ·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据 |
| ·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为 |
|