Flash Builder 开发AIR for Android(5) 保存设计方式
Local SharedObject 这种方法比较简单方便的保存少的数据到到设备中。你不用自己去管理这些数据,设备会自动管理他。 SharedObject 在 flash.net 包中,继承自EventDispatcher . ShareObject 和浏览器中的cookie 类似,但是他不会过期,而且有一个默认的大小限制为100K。他是AMF格式的数据。可以存储Array,Object,XML,Number,等各种数据类型。使用方法: import flash.net.SharedObject; //获取SharedObject,如果存在,则获取,如果不存在则创建。 var so:SharedObject=SharedObject.getLocal("myApplication"); //添加数据 so.data.animal="Hamseter"; so.data.food=["Grains","Avodcado","carrot"]; ? //保存数据 so.flush(); ? //检查flush 的状态 var flushStatus:String=so.flush(); if(flushStatus!=null) { switch(flushStatus) case SharedObjectFlushStatus.PENDING: so.addEventListener(NetStatusEvent.NET_STATUS.onFlushStatus); break; case SharedObjectFlushStatus.FLUSHED: trace("scuccess") break; } private function onFlushStatus(event:NetStatusEvent):void { trace(event.info.code) } ? //显示所有的属性 for (var i:String in so.data) { trace("prop",i,";",so.data[i]) } ? //大小 so.size() ? //删除 delete so.data.animal ? //清空 so.clear() ? ? 文件系统 文件系统对于使用电脑的人来说并不陌生。可以读取,写入,移动和删除文件,组织方式是有等级目录的。在AIR Android 中 存储目录或者是SD卡的文件能被创建和修改。 File 类在flash.filesystem 中,集成自FileRference 类。即可以代表文件,也可以代表目录。 如: import flash.filesystem.File; var file:File=File.applicationStroageDirectory.resovePath("hello.text"); //创建文件夹,并且给文件夹中添加文件 import flash.filesystem.FileStream; import flash.filesystem.FileMode var folder:File=File.applicationDirectory.resolvePath("greetings"); if(!folder.exists) { folder.createDirectory(); } var file:File=folder.resolvePath("hello.txt"); ? ? ? //读文件: var fileStream:FileStream=new FileStream(); fileStream.open(file,FileMode.READ); var st:String=fileStream.readUTFBytes(fileStream.bytesAvailable); fileStram.close(); trace(st) fileStream.close(); ? //delete file file.deleteFile(); //delete directory file.deleteDirectory(true) ? 同步与异步 ? 异步读取文件 ? var fileStream:FileStream=new FileStream(); fileStream.addEventListener(ProgressEvent.PROGRESS,onProgress); fileStream.addEventLIstener(Event.COMPLETE,onComplete); fileStream.openAsync(file,FileMode.READ); ? private function onProgress(event:ProgressEvent):void { trace(fileStream.bytesAvailabel) } ? private function ?onComplete(event:Event):void { fileStream.removeEventListener(ProgressEvent.PROGRESS,onProgress); fileStream.removeEventListener(ProgressEvent.COMPLETE,onComplete); var byteArray:ByteArray=fileStream.bytesAvailable; fileStream.close(); } ? 临时文件 // var tempDirectory:File=File.CreateTempDirectory(); var tempFile:File=File.createTempFile(); //删除 tempFile.deleteFile(); tempDirectory.deleteFile(); //回收,因为Android 中没有回收站,所以回收就是删除 tempFile.moveToTrash(); tempDirectory.moveToTrash(); ? ? SQLite 数据库 ? 使用sqlite 数据库系统是为了解决本地缓存的另一个方案,当持久层的数据比较复杂,或者是你想一不同的方式来组织数据,或者你是想私有化你自己的数据。 AIR 运行环境就包含了sql 数据的引擎,用来创建,组织和维护数据,使用的是开源的sqlite 数据库。他不会去使用android os 的sqlite 框架。 Sql 类在flash.data 包中。 这里也可以使用同步与异步的方式,为了简单起见,本节采用异步的模型。 创建数据库文件: 代码:import flash.fileSystem.File; private function createDataBase():void { var file:File=File.applicationStorageDirectory.resolvePath("myData.db"); if(file.exists) { trace(" already exist") } else { trace("not exist") } } //打开数据文件 ? import flash.data.SQLconnection private var connection:SQLconnection; connection=new SQLConnection(); //open file try { connection.open(file); trace("Opend") } catch(error:Error){ ? } //创建表 import flash.data.SQLStatement; import flash.data.SQLMode; var statement:SQLStatement=new SQLStatement(); statement.sqlConnection=connection; var request:String="CREATE TABLE IF NOT EXIST geography(id interger primary key autoincrement,country text,cite text)"; statement.text=request; try { statement.execute(); } catch(error:Error) { trace(error) } //add data var statement:SQLStatement=new SLQStatement(); statement.sqlConnection=connection; var insert:String="insert into geography(coungtry,cite)values('france','paris')"; statment.text=insert; try { statment.execute(); } catch(e:Error) { trace(e) } //如果数据时动态的 addItem({country:"France",city:"Paris"}); private function addItem(object:Object):void { var statement:SQLStatement=new SQLStatement(); statement.sqlConnection=connection; var insert:String="insert into geography(coungry,city)values(?,?)"; statement.text=insert; statment.parameters[0]=object.country; statment.parameters[1]=object.city; try { statment.execute(); } catch(e:Error) { trace(e) } } //请求数据: import flash.data.SQLResult; var statement:SQLStatement=new SQLStatement(); statement.sqlConnection=connection; statement.text="select * from geography"; statement.addEventListener(SQLEvent.RESULT,selectReceived); statement.execute(); private function selectReceived(event:SQLEvent):void { statement.removeEventListener(SQLEvent.RESULT,selectReceived); var result:SQLResult=statement.getResult(); if(result!=null) { var rows:int=result.data.length; for(var i:int=0;i<rows;i++) { var row:Object=result.data[i]; trace(row.id+row.country,row.city) } } } //查询一个结果 var statement:SQLStatement=new SQLStatement(); statement.sqlConnection=connection; statement.text="select * from geography where country=:c"; statement.addEventListener(SQLEvent.RESULT,selectReceived); statement.parameters[":c"]=mycity; //execute(1) 表示只有一个返回 statement.execute(1); ? var result:SQLResult=statement.getResult(); if(result.data!=null) { trace(result.data.country) } //edit 数据 modifyItem("UNIted","dc"); private function modifyItem(myCountry:String,myCity:String):void { var statement:SQLStatement=new SQLStatement(); statement.sqlConnection=connection; var updateMessage:String="update geography set city=:ci where country=:c0"; satement.text=updateMessage; statement.parameters[":c0"]=myCountry; statement.parameters[":c1"]=myCity; try { statement.execute(); }catch(e:Error) { trace(e) } } // 删除 private function deleteItem(myCountry:String):void { var statement:SQLStatement=new SQLStatement(); statement.sqlConnection=connection; var deleteMessage:String="delete from geograhy where countr=:a"; statement.text=deleteMessage; statement.parameters[":a"]=myCountry; try { statment.execute() }catch(e:Error) { trace(e) } } //加密数据库: import flash.utils.BytaArray; import flash.data.EncryptedLocalStore; //加密 function write():void { var myData:ByteArray=new ByteArray(); myData.writeUTFBytes("my very sensitive data"); EncryptedLocalStore.setItem("mykey",myData); } //解密: function read():void { var mydata:ByteArray=EncryPtedLocaoStore.getItem("myKey"); if(myData=null) { trace(myData.readUTFBytes(mydata.bytesAvailabel)); } } //删除: function delte():void { EncryptedLocalStore.removeItem("myKey"); } 结论: 本节讲述了多种方法来保存持久化数据。可以去拓展你的保存数据的方法,以及子定义保存数据的方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |