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");
}
结论:
本节讲述了多种方法来保存持久化数据。可以去拓展你的保存数据的方法,以及子定义保存数据的方法。
相关推荐
adobe air for android v3.03 apk文件 在安卓上安装air平台
Developing Adobe AIR Applications for Android Contents Getting Started Workflow for developing and testing an AIR for Android app Available Documentation Flash Platform tool support Installing the ...
《使用AdobeAIR开发Android应用程序》源代码
使用AdobeAIR开发android应用
如何使用adobe air开发android移动应用,详细入门教程
使用Adobe AIR开发Android应用程序,英文浅显易懂,感兴趣的朋友可以下来学习。
[使用AdobeAIR开发Android应用程序].PDF 及源代码 Flex Android 开发 ,pdf 以及源码。比较详细的介绍移动开发的各个领域
资源名称:Android移动应用开发 基于Adobe AIR内容简介:《Android移动应用开发:基于AdobeAIR》共四部分19章,主要介绍如何使用AdobeAIR开发Android移动应用,深入讲解Android移动开发特有的各种主题,力图帮助读者...
AdobeAIR for javascript developers
在 Flash Professional 中创建您的第一个 AIR for Android 应用程序 创建第一个用于 iOS 的 AIR 应用程序 使用 Dreamweaver 创建第一个基于 HTML 的 AIR 应用程序 使用 AIR SDK 创建第一个基于 HTML 的 AIR 应用...
adobe AIR的本地框架FluorineFx Aperture 通过它AIR应用程序能够直接调用使用C,C++,C#等编写的类库。
adobe air 连接 airplay功能
adobe air 安装包part1adobe air 安装包part1adobe air 安装包part1adobe air 安装包part1
Adobe AIR技术学习Adobe AIR技术学习
dreamweaver的adobe air扩展Adobe_AIR.mxp
Android移动开发-基于Adobe AIR官方网站的全套代码,让开发者一目了然
基于Adobe AIR 的 Android 移动应用开发(扫苗版)
Adobe Air Extension for Dreamweaver 是第一次安装开发环境必须安装的,但是很难找到(《指南》中给出的链接,怎么也找不到下载文件链接)
Android移动应用开发基于AdobeAIR(布罗西耶著) Android移动应用开发
AdobeAIR.dmg