zoukankan      html  css  js  c++  java
  • Adobe Flash Builder 4.5 Android Air 程序开发系列 之五 保存数据的几种方式

    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");

    }

    结论:

    本节讲述了多种方法来保存持久化数据。可以去拓展你的保存数据的方法,以及子定义保存数据的方法。

  • 相关阅读:
    Luogu P2633 Count on a tree
    Luogu P4011 孤岛营救问题
    Luogu P3157 [CQOI2011]动态逆序对
    SCOI2015 国旗计划
    AT2165 Median Pyramid Hard
    BZOJ2959 长跑
    SCOI2015 情报传递
    SDOI2011 染色
    SCOI2010 幸运数字
    SHOI2016 黑暗前的幻想乡
  • 原文地址:https://www.cnblogs.com/csharponworking/p/2117776.html
Copyright © 2011-2022 走看看