flash,AIR的本地存储初步了解

呃,只是今天在做手机上的air程序的存储,所以稍微看了下flash,air的存储本地数据方面的知识。

存储本地数据的方法其实有不少,最简单的就是用shareObject了,的确是最简单的了,基本属于零基础就能用的了。shareObject直译为共享对象(有时称为“Flash cookie”)是一个数据文件,可以将数据存储到用户的本地硬盘上,然后在同一会话期间或以后的会话中调用这些数据。各应用程序仅能访问它们自己的 SharedObject 数据,而且仅当它们在同一域中运行时才能访问。不会将这些数据发送到服务器,并且在其他域中运行的其他应用程序不能访问这些数据,但同一域中的应用程序可以访问这些数据。

共享对象有以下属性:
• 默认情况下不会到期。
• 默认情况下,每个共享对象的大小限制为 100 KB。
• 可以存储简单的数据类型(例如字符串、数组和日期等)。
• 存储在应用程序指定的位置(位于用户的主目录中)。
• 永远不会在客户端和服务器之间传输。
可以看出,ShareObject的限制就是单个文件大小不能超过100k,但是这些对于存储小的数据也绰绰有余了。另外,假如保存成功的话共享对象的大小将超过 100 KB,则 Flash Player 将显示“ 本地存储区” 对话框,用户可在该对话框中允许或拒绝为请求访问的域增加本地存储区。

ShareObject的方法有
clear()清除数据,删除ShareObject;
flush()立即将数据刷入文件;
getLocal()返回ShareObject的引用,不存在的话就新建一个(很方便)
getSize()获取存储数据的文件大小

使用的方法如下:

public var mySO:SharedObject;
mySO = SharedObject.getLocal("preferences");

这样就可以在默认的用户主目录的子目录下创建一个叫做preferences.sol的文件了,里面存有数据
这个目录在不同系统下会有变化(但是一般的话,其实不用太过关注...因为这一切都是自动的)
So.data.first = "animal";这样就可在first上存一个"animal"值了
读的时候直接用So.data.first就可以了


其他的还有个就是数据加密的问题,这里需要注意的一个是在用air开发Android应用时,Android 操作系统为每个应用程序分配一个单独的用户 ID。应用程序只能访问自己的文件和在公共位置创建的文件(如移动存储卡)。注意,在 Android 的“ 根” 设备上,使用根权限运行的应用程序可以访问其他应用程序的文件。因此,在根设备上,加密的本地存储不提供与非根设备上级别一样高的数据保护。


另外再说一个air里的File类,
File 对象表示文件或目录的路径。这可以是现有的文件或目录,也可以是尚不存在的文件或目录(例如,它可以表示希望创建的文件或目录的路径)。
File 类包含一些静态属性,供引用常用目录位置。这些静态属性包括:
•File.applicationStorageDirectory — 每个已安装的 AIR 应用程序独有的存储目录
•File.applicationDirectory — 安装应用程序的只读目录(其中包括所有已安装的资源)
•File.desktopDirectory — 用户的桌面目录
•File.documentsDirectory — 用户的文档目录
•File.userDirectory — 用户目录
有了这些属性,就可以不用担心因为使用了文本常量形式的本机路径(如"C:\Documents and Settings\test.txt"),结果只在一个平台上有效的问题了。
跨平台的时候效果很好,使用示例如下,此代码会指向应用程序存储目录中的 preferences.xml 文件
var prefsFile:File = File.applicationStorageDirectory;
  prefsFile = prefsFile.resolvePath("preferences.xml");
但是要注意的一点是File.applicationDirectory是个只读目录,所以不能直接利用这个地址写入,但是用一个new之后,问题就可以得到解决

var file:File = new File(File.applicationDirectory.resolvePath("preferences.xml").nativePath);

下面这个例子演示了如何读入本地的xml数据文件,修改其中数据的过程。

var countFile:File = new File(File.applicationDirectory.resolvePath("Levels/levelCount.xml").nativePath);
			
//open for the first time
var fileStream:FileStream = new FileStream();
fileStream.open(countFile,FileMode.READ);
			
var content:XML = new XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
content.cnt=(currentLevel+1).toString();
			
//open for the second time in order to write data
fileStream.open(countFile,FileMode.WRITE);
fileStream.writeUTFBytes(content.toXMLString());
fileStream.close();


另外的话,其实还有很多种方法(如在 AIR 中使用本地 SQL 数据库),每一种深入的话也都可以很深入...
虽然现在已经在使用的是这么用,不过因为理解的不是很深,所以有些地方的限制还不太了解...以后再看看有没有机会加深理解来修正,更新笔记吧~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值