![]() |
|
||||||||||
|
|||||
|
Доброго времени суток всем! Помогите, пожалуйста, а то я в тупике...
В общем в одном приложении понадобилось мне записывать некоторые (невизуальные) объекты в ByteArray. А потом из ByteArray востанавливать их. Пытался использовать ByteArray так, как описано в хелпе... Но ничего не получалось, и я так и не смог понять, почему... Решил сделать новый минимальный проект для тестирования работы с ByteArray и это меня вообще поставило в тупик... Почему-то объекты не копируются... А почему - не пойму... Вот такой есть основной код: (flex 3) <?xml version="1.0" encoding="utf-8"?>
<mx:Application initialize="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import flash.utils.ByteArray;
import classes.TestClass;
public function init():void
{
var t:TestClass = new TestClass();
t.test = "Modified value";
t.arr = new Array(5,6,7);
var b:ByteArray = new ByteArray();
b.writeObject(t);
b.position = 0;
var t2:TestClass = b.readObject() as TestClass;
trace(t2); // вот тут выводит null
// почему null ??? Вот этого я понять не могу....
}
]]>
</mx:Script>
</mx:Application>
код класса TestClass: package classes
{
public class TestClass
{
public var test:String = "test value";
public var test2:String = "test value 2";
public var arr:Array;
public function TestClass():void
{
super();
arr = new Array(1,2,3);
}
}
}
Подскажите, пожалуйста, как быть? Да, сразу напишу зачем мне оно надо. Вдруг кто посоветует лучший вариант. Это необходимо для сохранения некоторых невизуальных объектов из свф-ки на сервере, чтобы потом эти объекты можно было загрузить в другую свф-ку и там использовать (именно объекты с их параметрами а не классы). Может можно это сделать как-то по-другому? |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,058
|
Простите меня конечно, но как можно усмотреть в ссылке на объект байты лично для меня остается совершенно непонятным. Так же для меня совершенно непонятно, закой черт вам byteArray для передачи даных? Почему нельзя передать там через сокет или через post данные о нужном объекте? О мой мозг...
|
|
|||||
|
ну как можно усмотреть байты в ссылке на объект - тут уж вопрос не ко мне... Но по документации так. А зачем сохранять весь объект? - ну в первую очередь это пожелание заказчика, мотивированое тем, что класс объекта еще не полностью спроектирован и может неоднократно расширятся... Поэтому хочеться сделать сохранение всего объекта класса, независимо от содержания.
Да, нарыл кое-что оп этому вопросу. Вот сижу разбираюсь с таким интерфейсом как IExternalizable ... И функцией flash.net.registerClassAlias ... надеюсь копаю в правильном направлении.. |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,058
|
У вас 2й класс даже не наследуется от Object не говоря о смысле приведения его к AMF формату. Просто так то объекты не посылаются? Вообще каким образом вы себе это представляете. Взяли объект из памяти, переслали его васе в америку и распаковали обратно в память? Имхо у вас кардинально неверный подход к задаче. Если у вас будет расширяемый класс, который еще не дописан. Создайте интерфейс с перечнем обязательных свойств и методов.
|
|
|||||
|
Взял объект из памяти, запаковал и отослал на сервер. Там он хранится. Когда зашел Вася со своего компа по ссылке определенной, открылась свф-ка, в которой есть такой класс, она загрузила в себя объект с сервера и привела его тип к типу необходимого класса. Еще раз говорю, что это придумал не я. Мне просто надо это реализовать....
Кстати, решение одной проблемы было найдено. Немного неправильно был написан код класса TestClass. Правильный выглядит примерно вот так: package classes
{
import flash.net.*;
import flash.utils.IDataInput;
import flash.utils.IDataOutput;
import flash.utils.IExternalizable;
public class TestClass implements IExternalizable
{
private static const REG:* = flash.net.registerClassAlias("classes.TestClass", TestClass);
public var test:String = "test value";
public var n:int = 10;
public var test2:String = "test value 2";
public var arr:Array;
public function TestClass():void
{
super();
arr = new Array(1,2,3);
}
public function func(n:String):String
{
return (n + " = " + n);
}
public function writeExternal(output:IDataOutput):void
{
output.writeObject(test);
output.writeInt(n);
output.writeObject(test2);
output.writeObject(arr);
}
public function readExternal(input:IDataInput):void
{
test = input.readObject();
n = input.readInt();
test2 = input.readObject();
arr = input.readObject();
}
}
}
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
|
|
|||||
|
Ну... кто придумал... Американцы... А мы тут реализуем...
|
|
|||||
|
Регистрация: Feb 2008
Сообщений: 2
|
Так оно ж работает! Копирует...
А как бы передавать на сервер еще? Ну можно передавать данные (строку) структурированные в XML и так целиком в БД и хранить, потом эту строку отдавать клиенут, он ее в е4х переведет и применит себе необходимые параметры. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:54. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|