首页 > 其他分享 >Adobe AIR for Android 缓存本地数据常用方法

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

时间:2023-01-05 17:33:40浏览次数:48  
标签:Adobe trace fileStream flash AIR statement var Android data


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,trace,fileStream,flash,AIR,statement,var,Android,data
From: https://blog.51cto.com/kenkao/5991633

相关文章

  • android平台解释器+JIT+AOT代码执行学习
    dalvikJIT(Just-In-Time)JIT即时编译,即在代码运行时进行编译。对于dalvik虚拟机而言其检测到执行频率较高的函数时就会进行jit编译将其编译为本地机器码,这样下次此函数执行......
  • android游戏开发框架libgdx环境搭建
    原文链接:android游戏开发框架libgdx的使用(一)--环境搭建Libgdx是一款支持2D与3D游戏开发的游戏类库,兼容大多数微机平台(标准JavaSE实现,能运行在Mac、Linux、Windows等系统)......
  • android Service 的简单使用
    androidService的简单使用1、要使用Service,首先就是在配置文件里吗添加Service,如果不填加,你的Service是不能够使用的。目前学到的方法有两种  方法一:<serviceandroi......
  • Android开发环境搭建全程演示(jdk+eclipse+android sdk)
    全程演示android开发环境的搭建过程,无需配置环境变量。所有软件都是写该文章时最新版本一相关下载(1)javaJDK下载:进入该网页:​​http://java.sun.com/javase/download......
  • Android杂谈--ListView之ArrayAdapter的使用
    Android杂谈--ListView之ArrayAdapter的使用ArrayAdapter总是感觉写自己的博客才更能够学到东西,网上尽管有很多好的资料,但是参差不齐,需要浪费大量时间才能够......
  • Android学习day04【Button】
    报错,代码显示运行成功但是无法在模拟机上显示  原因是没有在包含应有id其二是关于设置背景颜色中关于background与backgroundTint的区别//这是backgroundTint的......
  • Android Studio 生成JavaDoc
    菜单位置配置GenerateJavaDocScope(生成文档的作用范围),可根据自己需求自行配置。导包若报错找不到android的某些包,可添加如下依赖(可能是由于JavaDoc没有导入An......
  • android基础02 - 多媒体、多线程与异步任务、Service、网络
    多媒体通知通知渠道:程序对自己发出的通知进行分类,用户可根据渠道对消息进行屏蔽或设置响铃振动。一个应用的通知渠道一旦创建就无法再修改,只能再创建新的可在Activity、......
  • Android CMake/JNI
    ​​AndroidJNI开发-简书​​​​​jni之jni与jna的比较-cbing​​​​AndroidJNI开发-简书​​​​JNA实战笔记汇总(一)——JNA简介及demo环境创建_水逆呱的博客a......
  • git,gradle,android studio的代理设置
    一、git设置1、git可以通过命令行设置代理参考这篇博客#!/bin/bashcase$1inon)gitconfig--globalhttp.proxy'socks5://127.0.0.1:1080'gitconfig--globalhttps.pr......