1

У меня проблемы с сохранением, а затем извлечение данных sharedObject.Объекты, сохраненные в общем объекте, не сохраняют свой тип данных после перезапуска. Есть идеи?

Например, если я сделать общий объект:

var myData:SharedObject = SharedObject.getLocal("myData"); 

Затем я сделать объект, в данном случае, "перья" listcollection объект

var lc:ListCollection = new ListCollection() 

затем присвоить его:

myData.data.lc = lc; 

ОК, если я не перезагружаю телефон (я работаю над android), и я назначил сохраненный списокКоллекция l istCollection вар и она отлично работает так:

var lc:ListCollection = myData.data.lc as ListCollection; 

, но если я перезагрузить телефон и сделать это:

var lc:ListCollection = myData.data.lc as ListCollection; 

не распознает его как «ListCollection», даже если я бросил его. В нем говорится, что он был сохранен как «объект»

Так что в основном он не сохраняет тип данных через перезапуск. Но если я загружаю его перед перезагрузкой, он работает ...

Любые идеи, почему SharedObject не работает? Он отлично работает с типичными объектами. Есть ли лучший способ сохранить данные локально и получить его? Почему бы это изменить тип данных?

ответ

1

AS3 языки исх о данных SharedObject:

Каждый атрибут может быть объектом любого типа ActionScript или JavaScript - массив, Number, Boolean, ByteArray, XML, и так далее. Например, в следующих строках присваиваются значения различным аспектам общего объекта:

Попробуйте использовать ByteArray.Как написать объект в SO:

  var list:ArrayList = new ArrayList(["test"]); 
      var buffer:ByteArray = new ByteArray(); 
      buffer.writeObject(list); 
      buffer.position = 0; 

      var mySo:SharedObject = SharedObject.getLocal("application"); 
      mySo.data.list = buffer; 
      mySo.flush(); 

И прочитать объект:

  var mySo:SharedObject = SharedObject.getLocal("application"); 
      var buffer:ByteArray = mySo.data.list; 
      var result:ArrayList = ArrayList(buffer.readObject()); 

Для пользовательского класса, используйте registerClassAlias ​​см Веспер комментарий.

1

Звоните registerClassAlias() до получения и установки общего объекта.

Manual

0

Я не верю, что SharedObject сохраняет любую информацию о типе, лучший способ обойти это, чтобы создать свой собственный процесс сериализации десериализации - Я считаю, что SharedObject будет делать наивные глубокую итерацию через объект, и попробуйте его сериализовать.

Возможно, это хорошая идея иметь метод, который преобразует ваши объекты в качестве неместных реализаций в любом случае, на всякий случай, если вы решите использовать какой-либо другой формат для хранения ваших объектов. С собственной кодировкой/разбором JSON - нет причин не делать этого (плюс, вы можете решить или не решить, что писать) - даже если SharedObject сохранил информацию о классе, как бы он определял частные переменные?

т.е.

SerializableListCollection extends ListCollection { 

    public function serialize():Object { 
    var children:Array = []; 

    // loop and add children 
    children.push(child.serialize()); 

    return { 
     children: children; 
    } 
    } 
} 

Затем вы можете сохранить JSON :: stringify (ListCollection.serialize()), чтобы сохранить ваши данные таким образом, не привязанной к какой-либо реализации.

0

Вы должны выполнить myData.flush() после присвоения всех данных myData.

 Смежные вопросы

  • Нет связанных вопросов^_^