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. HHVM 是如何提升 PHP 性能的?

    背景 HHVM 是 Facebook 开发的高性能 PHP 虚拟机,宣称比官方的快9倍,我很好奇,于是抽空简单了解了一下,并整理出这篇文章,希望能回答清楚两方面的问题: HHVM 到底靠谱么?是否可以 ...

  2. mysql 触发器学习(可以将mysql数据同步到redis)

    1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger befo ...

  3. 解决iframe缓存

    网上能搜到很多此类的资料,但都是互相转载,不太起作用.这几天写个用到,用了不少的iframe效果.结果发现iframe有缓存的问题.网上提供了思路,即对iframe的href后添加随即get值,来逃避 ...

  4. 优秀it博客和文章

    优秀博客 综合 杨文博(供职于百度公司,任复合搜索部资深研发工程师,目前作为tech lead,负责垂直行业搜索后端架构研发.) 杨远骋 徐宥(Google 软件工程师. 这个中文博客是我的思考记录, ...

  5. 学习面试题Day06

    1.字节流的处理方式 字节流处理的是计算机最基本的单位byte,它可以处理任何数据格式的数据.主要的操作对象就是byte数组,通过read()和write()方法把byte数组中的数据写入或读出. 2 ...

  6. Hibernate4.x之映射关系--多对多

    n-n的关联关系分为以下两类: 1.单向n-n关联关系: n-n的关联必须使用连接表 与1-n映射类似,必须为set集合元素添加key子元素,指定CATEGORIES_ITEMS表中参照CATEGOR ...

  7. JVM内存结构之一--总体介绍

    Java 虚拟机在执行Java程序的时候会把它管理的内存区域划为几部分,这一节我们就来解析一下Java的内存区域. 有的人把JVM管理的内存简单地分为堆内存和栈内存,这样分未免有些太肤浅了. Java ...

  8. 《深入Java虚拟机学习笔记》- 第1章 Java体系结构

    一.体系结构组成 当编写并运行一个Java程序时,就同时体验了这四种技术.用Java语言编写源代码,编译成Java Class文件,然后再在Java虚拟机上运行class文件.当编写程序时,通过调用类 ...

  9. error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7

    工程使用了DirectDraw,编译出错 error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7 解决办法是吧dxguid.lib添加到工程中,把lib所在目录添加到工程 ...

  10. Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

    前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. ...