我的序列化Dictionary的Length属性存储在SharedObject中

时间:2013-07-12 13:46:30

标签: flash flex serialization air shared-objects

我正在构建一个Adobe AIR应用程序,我将一个Dictionary存储在我的SharedObject中。 与提到的here有关的东西。

但为什么我的字典的长度总是为空。我最终不得不手动跟踪似乎有效的长度,但不能让我满怀信心。

另外,有人可以解释什么时候readExternal和writeExternal被调用?我发现它们被多次调用(对我来说似乎是不必要的)。由于它是一本字典,多次添加相同的值并不是一个问题,但是再一次,想知道我是否在这里设置了错误来触发它。

这就是我的

public class SharedObjectDictionary implements IExternalizable {

private var _dictionary:Dictionary;
private var _length:int;

public function addItem and removeItem
{
... just adds/removes to my _dictionary ...
... and keeps track of the length ...
}

public function readExternal(input:IDataInput):void
{
    var count:int = input.readInt();
    for (var i:Number = 0;i<count;i++)
    {
        var key:String = input.readObject();
        var val:String = input.readObject();

        addItem(key,val);
    }
}

public function writeExternal(output:IDataOutput):void
{
    output.writeInt(_length);

    for (var key:Object in dictionary)
    {
        output.writeObject(key);
        output.writeObject(dictionary[key]);
    }
}

}

当我进行调用以存储此SharedObject时

    var so:SharedObject = SharedObject.getLocal("xxxx");
    so.data["xxxxx"] = instance of the SharedObjectDictionary above;
    so.flush();
    so.close();
    so = null;

我发现readExternal被调用一次而writeExternal被调用3次。

谢谢!

1 个答案:

答案 0 :(得分:0)

Dictionary的长度始终为null,因为Dictionary未定义此类属性。如果您尝试访问某个其他类上不存在的属性,则会出现编译时错误。但由于Dictionary类为dynamic,因此不会发生此类编译错误。唯一的解决方案是自己跟踪长度。

我无法评论您关于readExternal / writeExternal的其他问题...您是否有可以展示的代码来证明这一点?