监测网络状态,离线/在线应用程序的实现

AIR与Flex web应用的另一区别在于可以动态监测网络状态,可以让开发者在网络连通或断线时用不同的方式处理程序,在Demo中我将用以下情况来表现AIR的离线与在线应用。

1. 用户在文本框中输入内容。文本框下方的保存按钮会动态显示当前网络状态: (在线)保存与(离线)保存.
2. 在用户点击保存按钮时如果网络在线,将对话框内容保存在服务器。
3. 如果保存时处于断线状态,将内容保存在本地文件中。
4. 当网络恢复时检查本地文件,如果有已经保存的内容,将内容传入服务器。

源代码很简单,不到100行,大家可以在最下方下载。现在我开始讲解

Demo操作方法

1. 按装运行demo,如果网络连接正常,你会看到文本框下的按钮为 (在线) 保存。
2. 输入任意信息,点击 (在线)保存 。你会看倒信息 “内容已上传服务器”。
3. 切断网络。大概3-5秒后你会看到文本框下方按钮变为(离线)保存。
4. 点击保存,你会看倒信息“内容已经在本地保存,会在下次连线时自动上传到服务器”。
5. 接痛网络,大概3--5秒后你会看倒信息 “缓存内容已上传服务器”。
6. Demo结束。

1. 启动应用程序后监控网络状态。

我们在 App的CreationComplete()中调用netWorkSyc来监控网络状态。

private function networkSyc():void{
//创建一个联接,使用HEAD表示不需要加载玩全部的页面。
var request:URLRequest = new URLRequest( “http://www.google.com”);
request.method = “HEAD”;

//用url创建监测对象,每3秒检查一次网络状态,如果网络状态发生变化,将结果返回到netWorkStatusHandle()
urlMonitor = new URLMonitor(request);
urlMonitor.pollInterval = 3000;
urlMonitor.addEventListener(StatusEvent.STATUS,netWorkStatusHandle);
urlMonitor.start();
}

//网络状态改变时响应该事件
private function netWorkStatusHandle(e:StatusEvent):void{
if(urlMonitor.available){
//如果有本地文件,假装上传服务器
if(this.checkLoaclFile()){
//Kevin TODO 上传服务骑
this.showAlert(”缓存内容已上传服务器”);
}
saveBtn.label = “(在线)保存”
}else{
saveBtn.label = “(离线)保存”
}
}

上面的networkSyc()方法中我使用了两个类的对象来实现网络监控,URLRequest 和 URLMonitor。我用URLRequest来建立一个连接对象request,连接的地址是www.google.com。然后已request作为构造参数创建URLMonitor对象。我就是靠它来完成对网络状态的监控。

监控原理很简单,当第一次执行networkSyc()时,urlMonitor会尝试连接www.google.com,然后将连接的结果发回到 netWorkStatusHandle(), 如果连接成功,urlMonitor.available会为true,反之为false。接下来每3秒检查一次网络状态,如果发生改变(连接成功变为连接失败或者连接失败变为连接成功),那么将再度触发StatusEvent.STATUS事件,调用netWorkStatusHandle()返回网络状态。

以上就是AIR监控网络的方式,大家如果感兴趣想知道更多URLMonitor的内容,可以在Help中搜索ServiceMonitor,它的sub class就是URLMonitor和SockterMonitor。

Demo中并没有真正在本地保存文件,保存与读取文件的方法我会在下一篇教程–“AIR的文件操作”中教给大家。

webstate

源文件下载
Demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值