`

Adobe AIR for Android 缓存本地数据常用方法

 
阅读更多

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 air1.1中文版

    5. **离线存储**:利用本地存储功能,AIR应用可以在用户离线时继续工作,缓存数据以供后续使用。 6. **安全机制**:AIR具有安全沙箱模型,确保应用在执行时不会对用户的系统造成损害。 7. **更新机制**:内置的...

    Flash_Development_for_Android_cookbook

    在Android平台上开发Flash应用程序,主要涉及到Adobe Flash Professional、ActionScript 3.0以及Adobe AIR等工具和技术。ActionScript是Flash的核心编程语言,它允许开发者创建交互式内容和动态应用程序。书中可能...

    专题资料(2021-2022年)AIR3兼容HTML5及AIR程序更新与调用本地类库方案的评估报告.docx

    Adobe AIR3 是一个跨平台的运行时环境,它使得开发人员能够创建能够运行在多个操作系统和设备上的应用程序,包括个人电脑、电视、Android、BlackBerry 和 iOS 设备。这个环境中,HTML5 的支持至关重要,因为它允许...

    [使用Flex4.5开发Android应用程序].源代码

    5. **AIR for Android**:Flex 4.5应用程序通常通过Adobe AIR运行在Android设备上,AIR为移动设备提供了运行Flash内容的环境。开发者需要了解如何配置和打包AIR应用程序,以便在Android设备上部署。 6. **布局管理*...

    基于ArcGIS Flex API开发Flex AIR Mobile应用

    Adobe AIR则为这些Flex应用提供了一个本地运行时,使它们能够在用户的设备上运行,无论是桌面还是移动设备。 接下来,我们探讨ArcGIS Flex API。该API提供了一整套用于处理地图、图层、服务和地理编码的类。它支持...

    as3 安卓游戏源程序

    11. **AIR for Android**:了解Adobe AIR运行环境,包括安卓SDK集成、打包和发布流程。 12. **性能优化**:避免不必要的计算,使用缓存,优化渲染效率等。 通过深入研究这些源代码,开发者不仅可以掌握AS3游戏开发...

    Flex+白皮书

    此外,Adobe AIR(Adobe Integrated Runtime)则允许Flex应用以桌面应用程序的形式运行,提供更丰富的本地功能。 3. **Flex组件库**:Flex SDK包含了丰富的预构建UI组件,如按钮、文本输入、列表视图等,这些组件...

    移动MM ane 附源码

    这可能包括但不限于离线缓存、断点续传、数据同步和错误恢复策略等。对于移动应用而言,这种功能可以极大地提高用户体验,特别是在网络条件不理想的地区或情况下。 3. Android ANE: Android ANE是ANE的一种特定...

    Flex技术中文帮助

    从Flex 4.5开始,Adobe引入了Adobe AIR技术,允许开发者将Flex应用扩展到桌面和移动设备,如iOS、Android和BlackBerry。Flex SDK包含了针对移动设备的特定组件和API,使移动应用开发变得容易。 七、性能优化 尽管...

    Flex从入门到精通

    包括减少组件数量、优化数据加载、使用位图缓存等方法,提升Flex应用程序的运行效率和用户体验。 通过这个“Flex从入门到精通”的教程,你可以系统学习Flex的基础知识,包括环境配置、组件使用、数据处理、网络通信...

    flex教程

    Flex通常与ActionScript和Flash Player或Adobe AIR一起工作,提供了丰富的用户界面组件和强大的数据绑定功能。 一、Flex基础 1. Flex架构:Flex基于MXML和ActionScript,MXML是用于定义用户界面布局的标记语言,而...

    SpriteSheetViewer 精灵表动画查看器V1.0.2 with Starling [Android]

    7.加入SharedObject本地缓存,会记录上一次选择的目录并自动选择对应图片名称的xml; 8.修改部分bug和逻辑问题,比如各个按钮什么时候可用和不可用,现在更加合理。 9.Starling库更新到1.4版本。 10.关于纹理尺寸...

    flex 中文帮助文档

    10. **移动开发**:Flex还支持开发针对移动设备的应用,如Android和iOS,通过Adobe AIR技术,可以将Flex应用部署到这些平台。 11. **图形和动画**:Flex提供强大的图形和动画支持,可以创建复杂的矢量图形,并实现...

    flex4.5 开发安卓程序文档

    Flex 4.5基于ActionScript 3.0和Flash Player或Adobe AIR运行时环境,提供了一个MXML和AS3的混合编程模型。MXML是一种声明性语言,用于定义用户界面布局,而AS3则用于编写业务逻辑和处理事件。Flex 4.5引入了Spark...

    flex完全自学手册-- 电子教案 PPT

    - Flex也支持移动应用开发,可以创建iOS、Android等平台的应用,利用Adobe AIR运行时。 10. **Flex的最佳实践** - 设计模式:理解并应用MVC、Observer等设计模式,提高代码可维护性。 - 性能优化:减少不必要的...

    Flex体系架构剖析

    Adobe AIR允许开发者使用Flex技术创建跨平台的桌面和移动应用,支持iOS、Android和BlackBerry等操作系统。 总结来说,Flex体系架构是一个全面的开发解决方案,涵盖了从界面设计、业务逻辑到数据通信的各个方面。...

    ORGs for Scalable,Robust, Privacy-Friendly Client Cloud Computing

    1. **云服务向客户端的扩展**:随着Silverlight(Microsoft)、Android(Google)、AIR(Adobe)和Java(Sun)等技术的发展,云计算服务正逐步向客户端设备延伸。这意味着原本只在互联网层面处理的问题现在也需要在...

    FLEX教程很全面的四个PDF中文 文档

    Flex是一种基于Adobe Flash Player或Adobe AIR运行时的开源框架,主要用于构建富互联网应用程序(RIA),尤其在创建交互式、图形丰富的Web应用方面表现突出。本教程涵盖的四个PDF中文文档将深入讲解Flex的核心概念和...

    flex4.5 手机应用开发

    4. 离线支持:利用本地存储和离线缓存技术,使应用能在无网络连接时也能运行。 七、发布与部署 完成应用开发后,可以使用 Flash Builder 的打包功能生成适用于不同平台的安装包,如 Android 的 .apk 文件或 iOS 的 ...

    flex入门经典教程

    Flex不仅可以用于桌面Web应用,还可以通过Adobe AIR框架开发桌面应用,甚至支持移动设备如Android和iOS。学习如何使用Flex进行跨平台开发是扩大技能树的一个重要方向。 十、实战项目 通过实际的Flex项目练习,将...

Global site tag (gtag.js) - Google Analytics