Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.04.2008, 18:43
chudesno вне форума Посмотреть профиль Отправить личное сообщение для chudesno Найти все сообщения от chudesno
  № 1  
Ответить с цитированием
chudesno
 
Аватар для chudesno

Регистрация: Apr 2006
Сообщений: 85
По умолчанию Не получается корректно сериализовать объект

Доброго времени суток .
Стоит задача: сохранить объект - экземпляр класса, а потом восстановить его. Все это с помощью SharedObject.

Вот класс объекта, который пытаюсь сохранить:

Код:
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 + _age + " years";
		}
	}
}
А вот код, которым все это дело и должно сохраняься (но нет )

Код:
package
{
	import flash.net.registerClassAlias;
	import model.Person;
	import flash.net.SharedObject;
	
	public class Example {
		public function Example () {
			registerClassAlias("model.Person", Person);
			var example : SharedObject = SharedObject.getLocal("example");
			if (example.data.person == undefined) {
				trace ("first time");
				var person : Person = new Person ("Derron", 24);
				example.data.person = person;
				
			} else {
				trace ("it is already saved");
			}
			trace (example.data.person.toString());
		}
	}
}

Когда идет попытка восстановить объект, плеер выкидывает ошибку с тем, что ожидалось 2 параметра в конструкторе класса Person, а получено 0. Получается что при восстановлении флеш вызывает конструктор класса без параметров...
Я пробовал исключить параметры из конструктора и перенести инициализацию в отдельный метод. В результате после восстановления я получаю объект нужного класса, но с пустыми значениями полей..

Подскажите, пожалуйста, как все-таки можно восстановить объект?

Старый 14.04.2008, 19:47
ulik вне форума Посмотреть профиль Отправить личное сообщение для ulik Посетить домашнюю страницу ulik Найти все сообщения от ulik
  № 2  
Ответить с цитированием
ulik
 
Аватар для ulik

Регистрация: Apr 2007
Адрес: Moscow city
Сообщений: 286
Отправить сообщение для ulik с помощью ICQ
По поводу сохранения экземпляра своего класса:
Цитата:
data:Object [read-only]
Language Version : ActionScript 3.0
Player Version : Flash Player 9
The collection of attributes assigned to the data property of the object; these attributes can be shared and stored. Each attribute can be an object of any ActionScript or JavaScript type — Array, Number, Boolean, ByteArray, XML, and so on.
"Object of any AS" - видимо, имеют ввиду стандартные...

зы: сделайте get метод, который вам вернет Object из вашего класса и пишите объект. С ними нет проблем.
__________________
Дизайн, как презерватив - каждому жмет по-своему © Я
мое: блог форум

Старый 15.04.2008, 12:52
chudesno вне форума Посмотреть профиль Отправить личное сообщение для chudesno Найти все сообщения от chudesno
  № 3  
Ответить с цитированием
chudesno
 
Аватар для chudesno

Регистрация: Apr 2006
Сообщений: 85
да, объектом можно это сделать, но, ИМХО, предпологалось что и кастомные классы можно сохранять (или пересылать по сети)..

Старый 15.04.2008, 13:37
badun вне форума Посмотреть профиль Отправить личное сообщение для badun Найти все сообщения от badun
  № 4  
Ответить с цитированием
badun

Регистрация: Dec 2007
Сообщений: 269
If a class does not implement, nor inherits from a class which implements, the IExternalizable interface, then an instance of the class will be serialized using the default mechanism of public members only. As a result, private, internal, and protected members of a class will not be available.

To serialize private members, a class must use the IExternalizable interface.

Старый 17.04.2008, 19:28
NePridymal вне форума Посмотреть профиль Отправить личное сообщение для NePridymal Найти все сообщения от NePridymal
  № 5  
Ответить с цитированием
NePridymal
 
Аватар для NePridymal

Регистрация: Apr 2007
Сообщений: 143
Отправить сообщение для NePridymal с помощью ICQ
Можно сохранять. Но подводных камней там куча. Я не так давно делал сохранение кастомных объектов на сервере. Итак
- все классы объектов, которые ты хочешь сохранять должны реализовывать интерфейс IExternalizable ... Но это еще не все.
- если у тебя в востанавливаемом объекте есть объекты других классов и перед востановлением ты закрываешь свф-ку (тоесть востановление происходит не сразу после сохранения) обязательно (!!!) надо перед востановлением сделать экземпляры всех этих объектов. Потому что флеш весьма странно работает. Если ты пытаешся востановить объект какого-то класса, а ни одного экземпляра этого класса не использовалось еще до этого, то вылетает ошибка. Это относится только к пользовательским классам. В хелпе нигде об этом ничего не сказано, и ошибка показывается весьма непонятная. У меня ушла неделя, на то, чтоб разобраться что к чему в этом вопросе.

Старый 24.04.2008, 15:49
chudesno вне форума Посмотреть профиль Отправить личное сообщение для chudesno Найти все сообщения от chudesno
  № 6  
Ответить с цитированием
chudesno
 
Аватар для chudesno

Регистрация: Apr 2006
Сообщений: 85
Спасибо, буду пробовать.. Камней подводных куча, конешн))) Вчера вот разбирался с ExternalInterface и почему он в ие не работает на одной странице. Оказалось что объект находился в форме, а так низзя =).. Хотя в хэлпе не сказано.

Старый 24.04.2008, 17:09
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
swfformfix.rar
Фикс для форм. Не мое, там вроде внутри написано, кто автор =)

ЗЫ. Если форма не результат деятельности АСП (т.е. не оборачивает всю страницу и валидность не важна - можно просто в форму с флешкой вставить еще 1 пустой тег <form> - тоже будет работать =)
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 24.04.2008 в 17:15.
Старый 24.04.2008, 20:41
krolser вне форума Посмотреть профиль Отправить личное сообщение для krolser Найти все сообщения от krolser
  № 8  
Ответить с цитированием
krolser
 
Аватар для krolser

Регистрация: Oct 2007
Адрес: Гродно
Сообщений: 67
Отправить сообщение для krolser с помощью Skype™
Зачем ExternalInterface. Ты же собирался сохранять в SharedObject.
Badun тебе всё очень чётко ответил.

За более подробной информацией обращайся к документации по интерфейсу IExternalizable
Там в конце даже пример есть. Почти такой как тебе надо.

Если ты не собираешься заморачиваться с этим, то обрати особое внимание на то, что ты можешь сеарилизовать только паблик поля.

Цитата:
Сообщение от NePridymal Посмотреть сообщение
Можно сохранять. Но подводных камней там куча. Я не так давно делал сохранение кастомных объектов на сервере. Итак
- все классы объектов, которые ты хочешь сохранять должны реализовывать интерфейс IExternalizable ... Но это еще не все.
Не обязательно. Читайте внимательно пост Badun'а. В нем "черным по белому написано", что если вы хотите сохранять private поля, тогда только надо использовать IExternalizable интерфейс.


Последний раз редактировалось krolser; 24.04.2008 в 21:17. Причина: Неправильно сослался на другого человека. Дополение.
Создать новую тему Ответ Часовой пояс GMT +4, время: 10:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:56.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.