Flex 共享对象 将数据从对象强制转换为自定义类对象



我只是尝试使用 flex 共享对象功能保存一些数据。数据已成功保存,但是当我检索它时,我无法将其键入回原始对象。例如,我正在保存自定义类的一个对象,当我检索它时,它是 Object 类型。虽然我在检查时调试模式,但它具有自定义类的所有成员及其值。但是我无法将其从对象类型转换回我的自定义类。

谁能帮我解决这个问题?

您可以使用 registerClassAlias

registerClassAlias("com.path.to.MyClass", MyClass);
myStuff = SharedObject.getLocal("myAppStuff");
myStuff.data.whatINamedIt = myClassInstance;
myStuff.flush();

现在当把它拿出来时...你可以说:

myStuff = SharedObject.getLocal("myAppStuff");
var mySavedClass:MyClass = myStuff.data.whatINamedIt as MyClass;

自定义类必须实现 IExternalizable

在获取共享对象之前,必须使用 registerClassAlias

        private var so:SharedObject;
        private function writeMyCustomClass():void
        {
            registerClassAlias("classes.MyCustomClass", MyCustomClass);
            so = SharedObject.getLocal("savedCustom");
            so.clear();
            var mycustom:MyCustomClass = new MyCustomClass;
            mycustom.name = "Raja";
            mycustom.age = 27;
            so.data.custom = getAndwriteCustomClassToByteArray(mycustom).readObject();
            so.flush();
        }
        private function getAndwriteCustomClassToByteArray(mycustom:MyCustomClass):ByteArray
        {
            var copier:ByteArray = new ByteArray();
            copier.position=0;
            copier.writeObject(mycustom);
            copier.position=0;
            return copier;
        }
        private function getMyCustomClass():void
        {
            registerClassAlias("classes.MyCustomClass", MyCustomClass);
            so = SharedObject.getLocal("savedCustom");
            var mycustom:MyCustomClass = so.data.custom;
        }


package
{
import flash.utils.IDataInput;
import flash.utils.IDataOutput;
import flash.utils.IExternalizable;
public class MyCustomClass implements IExternalizable
{
    public var name:String;
    public var age:int;
    public function MyCustomClass()
    {
    }
    public function writeExternal(output:IDataOutput):void {
        output.writeObject(this.name);
        output.writeInt(this.age);
    }
    public function readExternal(input:IDataInput):void {
        this.name=input.readObject();
        this.age=input.readInt();
    }
}

来源 : www.actionscript.org

最新更新