zoukankan      html  css  js  c++  java
  • Flex 序列化自定义类 解决 sharedObject 保存自定义对象

    问题
    我想把自定义类实例存储到LSO
    解决办法
    使用flash.net.registerClassAlias( )方法保留类型信息并把类实例添加到共享对象的data属性上。
    讨论
    LSOs 使用特殊的二进制格式,Action Message Format (AMF),当要在LSO中存储类实例时,实例会被编码为包含属性的普通的object。这样当重新从共享对象中读取实例时,已经不是原来的类实例了,因为已不能根据类型信息解码回来。

    flash.net包中的registerClassAlias( )方法就是为解决这个问题的,这个方法的使用是很简单的,在AS1.0和AS2.0中写法是Object.registerClass( ),但是在AS3.0里已经被删除了,取而代之的是flash.net.registerClassAlias( )。

    registerClassAlias( )方法需要两个参数,第一个参数表示类的别名,可以用任意字符串表示别名,比如modal包中有个Person类,别名可以是modal.Person,第二个参数类引用。
    -ActionScript
    registerClassAlias( "somePackage.ExampleClass", ExampleClass );

    这个代码的作用是把这个类的信息存进LSO,当读取数据时,Flash 播放器就知道这个object到底是什么类。

    下面的例子完整实现了类实例的保存,首先创建自定义类:
    -ActionScript
    // Create a Person class in the model package
    package model {
    public class Person {
    private var _firstName:String;
    private var _age:int;
    public function Person(firstName:String, age:int) {
    _firstName = firstName;
    _age = age;
    }
    public function toString( ):String {
    return _firstName + " is " + _age + " years old";
    }
    }
    }

    接着,编写主类读取和写入数据
    -ActionScript
    package {
    import flash.net.registerClassAlias;
    import flash.net.SharedObject;
    import model.Person;
    public class Example {
    public function Example( ) {
    // Map "model.Person" to the Person class
    registerClassAlias( "model.Person", Person );
    // Create a shared object and store a Person instance in it
    var example:SharedObject = SharedObject.getLocal( "example" );
    // Test to see if the person instance has been saved already
    if ( example.data.person == undefined ) {
    trace( "first time, saving person instance" );
    var person:Person = new Person("Darron", 24);
    // Write the class instance to the local shared object
    example.data.person = person;
    else {
    trace( "person instance already saved, using stored values" );
    }
    /* Every time this code is executed, the following is displayed:
    Darron is 24 years old
    */

    trace( example.data.person.toString( ) );
    }

    这里需要注意的是registerClassAlias( )必须在SharedObject.getLocal( )方法之前调用才有效。否则的话共享对象会把Person解释为普通的object类型进行存储。

  • 相关阅读:
    列出本年度所有星期天的日期
    批量与快速禁用用户
    显示本月每一天日期
    ASP.NET + VB.NET + SQL小网站程序
    重设Syteline sa帐户密码
    ASP.NET系统 + Access数据库
    2的倍数相加后如何还原
    根据Forms名找出其所归属的权限组
    401 Unauthorized:access is denied due to invalied credentials
    The remote server returned an error: (404) Not Found
  • 原文地址:https://www.cnblogs.com/bmate/p/2084915.html
Copyright © 2011-2022 走看看