【问题标题】:Is it possible to store an Array into an EncryptedLocalStore item? AIR是否可以将数组存储到 EncryptedLocalStore 项目中?空气
【发布时间】:2011-09-30 12:43:25
【问题描述】:

我想保存 Array 的结构并在下次打开 AIR 应用程序时加载它。有没有办法将它存储到 EncryptedLocalStore 项目,然后在我重新打开应用程序时获取它?

【问题讨论】:

    标签: arrays actionscript-3 apache-flex air flash-builder


    【解决方案1】:

    EncryptedLocalStore.setItem() 方法在存储内容时采用字节数组。要存储数组,只需使用 ByteArray.writeObject() 方法(如http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html#writeObject() 中所述)将您的 Array 转换为 ByteArray - 然后将其保存到 ELS。

    var array:Array = getArray();
    var byteArray:ByteArray = new ByteArray();
    byteArray.writeObject(array);
    EncryptedLocalStore.setItem('somekey', byteArray);
    

    希望这会有所帮助。

    更新:添加了检索数组的代码。

    var byteArray:ByteArray = EncryptedLocalStore.getItem('somekey');
    var array:Array = byteArray.readObject() as Array;
    

    更新:对于自定义类。

    如果您想将自己的自定义类序列化到 ByteArray,您可能必须在将对象写入 ByteArray 之前调用 registerClassAlias()。例如。

    registerClassAlias("com.example.eg", ExampleClass);
    

    【讨论】:

    • 我很想知道这是否适合你。过去我没有用这种方法运气。虽然我会指出,我是在 2 年前从一个 HTML/JS AIR 应用程序中做的,所以我可能做错了,它与 JS 对象不一样,或者它很长-since-fixed bug。
    • 我对 byteArrays 很陌生,而且通常只是 as3 上的数组。您可以为我添加一种方法来取回数组吗?如果我分析正确,您发布的方法仅用于存储数组。
    • @JasonDean 我以前使用过这种方法,它对我有用。如果您使用要保存的自定义对象,则需要在将对象转换为 ByteArray 之前调用 registerClassAlias()。例如 registerClassAlias("com.example.eg", ExampleClass);
    【解决方案2】:

    我发现最简单的方法是将 Array 序列化为字符串,然后将该字符串存储在 ELS 中。然后,当您将其拉出时,将其反序列化回数组。

    【讨论】:

    • 您如何实际“序列化”和“反序列化”数组?使用什么功能?等等。
    • 如果你有 as3corelib,你可以用它来序列化。 ntt.cc/2008/10/06/…
    猜你喜欢
    • 2016-09-17
    • 2020-12-27
    • 2019-03-11
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多