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");

}

结论:

本节讲述了多种方法来保存持久化数据。可以去拓展你的保存数据的方法,以及子定义保存数据的方法。

AIR 程序开发系列 之五 保存数据的几种方式的更多相关文章

  1. iOS保存数据的4种方式

    在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeyed ...

  2. 微信小程序开发3之保存数据及页面跳转

    第一  保存本地数据 1.异步保存本地数据 wx.setStorage({ key:keyStr, data:dataStr, success: function(e){}, fail: functi ...

  3. spark sql中保存数据的几种方式

    从官网来copy过来的几种模式描述: Scala/Java Python Meaning SaveMode.ErrorIfExists(default) "error"(defau ...

  4. servlet保存数据的几种方式

    In Servlets you have 4 scopes where you can store data. Application Session Request Page

  5. 【微信小程序开发•系列文章六】生命周期和路由

    这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...

  6. ASP.NET4.5Web API及非同步程序开发系列3

    ASP.NET4.5Web API及非同步程序开发系列(3) 接着上一篇博客的内容做一个补充,正好是一个大哥提出来的,我们看看一个有趣的现象. 请求相关问题的补充: 我们先在Controller中的定 ...

  7. ASP.NET4.5Web API及非同步程序开发系列

    ASP.NET4.5Web API及非同步程序开发系列 认识ASP.NET WEB API 他的前身为WCF WEB API用于协助WCF支持RestFul.现在集成进ASP.NET,正式更名为ASP ...

  8. WordPress版微信小程序开发系列(二):安装使用问答

    自WordPress版微信小程序发布开源以来,受关注的程度超过我原来的想象.这套程序主要面对的用户是wordpress网站的站长,如果wordpress站想在微信的生态圈得到推广,小程序成为一种重要的 ...

  9. 微信小程序开发系列五:微信小程序中如何响应用户输入事件

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

随机推荐

  1. BZOJ2500: 幸福的道路

    题解: 一道不错的题目. 树DP可以求出从每个点出发的最长链,复杂度O(n) 然后就变成找一个数列里最长的连续区间使得最大值-最小值<=m了. 成了这题:http://www.cnblogs.c ...

  2. CQOI2011分金币&HAOI2008糖果传递

    双倍经验…… 没想到白书上竟然有……我还看过……还忘了…… 抄份题解: A1 + X1 - X2 = G A2 + X2 - X3 = G . . . An + Xn - X1 = G 解得 X1 = ...

  3. C# List 用法与示例

    Problem. You have questions about the List collection in the .NET Framework, which is located in the ...

  4. android ListView注意事项

    所有问题,都是自己遇到过的. 但内容,有一半是自己写的,也有一半是复制过来. 所以,写成原创还请原谅 1. ListView添加标题后(addHeader())后,使用listView.getAdap ...

  5. Gen_fsm行为实践与分析

    1.简介 Gen_fsm是一个通用的有限状态机,它描述了这样的一组关系: State(S) x Event(E) -> Actions(A),State(S') 这个关系意味着:如果在S状态下发 ...

  6. 用JSP做后台管理系统

    添加新闻 /**  * 获取从页面读取的数据  * @param request  * @return 单个新闻信息  * @throws UnsupportedEncodingException   ...

  7. 一些常被你忽略的CSS小知识

    1.CSS的color属性并非只能用于文本显示 对于CSS的color属性,相信所有Web开发人员都使用过.如果你并不是一个特别有经 验的程序员,我相信你未必知道color属性除了能用在文本显示,还可 ...

  8. 给定金额m和红包数量n

    这一题如果是采用暴力手段,不一定能获得正确答案,而且也非常耗时. 所以下面我们采用一个小技巧,也就是先产生n-1个红包,总得sum<m的,这样最后只要添加一个sum-m的红包钱数就可以了. 具体 ...

  9. 609B Load Balancing

    题意:有n本书分m个类别,现在你要买两本不属于同一类别的书,问有多少种方案. #include<iostream> #include<cstdlib> #include< ...

  10. Navicat通过云主机内网连接阿里云RDS

    背景 公司为了安全起见,RDS设置只允许阿里云主机的内网端可以访问.这就意味,如果要操作RDS就需要连接到云主机上之后通过mysql shell操作.操作起来很复杂麻烦,今天看同事用Navicat f ...