isOnline = false; //Get data from local file readLocalFile(); } private function requestCompleteHandler(event:Event):void{ isOnline = true; roomsXML = XML(requestLoader.data);//Write data locally saveDataLocally(); } [/Code]
applicationClosingHandler()函数只是为了确保在程序关闭的时候FileStream也会随之关闭。上面的大部分代码想必你已经很熟悉了,这里注意readLocalFile() 和saveDataLocally() 两个函数,这两个函数是用来管理本地文件或数据的,它们的工作流程如下:
如果 isOnline == true # 在初始数据加载之后调用requestCompleteHandler() # 数据被保存在roomsXML变量中,由于进行了绑定程序的显示会自动更新。 # 调用saveDataLocally() # 将roomsXML中的数据保存到FileStream
如果 isOffline == false # 调用requestErrorHandler() # 调用readLocalFile() # 将本地roomsXML文件中的内容保存在roomsXML中
处于在线状态的时候我们只需要刷新本地数据,这样的话只有在isOnline为true的时候onNetworkChange()才需要再次调用loadData()。一旦加载了数据就重复上面“如果isOnline == true”的步骤,将数据保存到本地并重新设置roomsXML的值,然后更新界面显示。
我在显示中多添加了几个数据项,这样就可以看到数据的改变。
 程序代码
<mx:VBox width="100%" height="100%"> <mx:Text text="{roomsXML.Room.length()} Rooms Available"/> <mx:TextArea id="RoomsList" width="100%" height="100%" text="{roomsXML.toXMLString()}" selectable="false" editable="false"/> </mx:VBox>
这个时候,下面所示的XML数据是线上的。图3显示了实用这个XML数据程序运行后的结果。
[Code (data/rooms.xml)] <?xml version="1.0" encoding="utf-8"?> <Rooms> <Room name="Room 1" /> <Room name="Room 2" /> <Room name="Room 3" /> <Room name="Room 4" /> <Room name="Room 5" /> <Room name="Room 6" /> <Room name="Room 7" /> <Room name="Room 8" /> <Room name="Room 9" /> <Room name="Room 10" /> </Rooms> [/Code]
 图 3. 使用这个XML数据运行程序
现在,我将断开网络连接,关闭程序然后重新运行它。(看图4)
 图 4.重新运行程序
OK,没有什么两样对吧?唯一发生改变的是底部所示的网络状态,现在我将关闭程序,然后在更新线上XML数据以后断开网络连接。
下面是新的XML(只是复制了一下Room节点)。
[Code (data/rooms.xml)] <?xml version="1.0" encoding="utf-8"?> <Rooms> <Room name="Room 1"/> <Room name="Room 2"/> <Room name="Room 3"/> <Room name="Room 4"/> <Room name="Room 5"/> <Room name="Room 6"/> <Room name="Room 7"/> |