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

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

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

Регистрация: Apr 2007
Сообщений: 143
Отправить сообщение для NePridymal с помощью ICQ
По умолчанию Непонятная работа ByteArray

Доброго времени суток всем! Помогите, пожалуйста, а то я в тупике...

В общем в одном приложении понадобилось мне записывать некоторые (невизуальные) объекты в 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>
почему trace(t2) выдет null ?? Не могу понять....

код класса 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);
		}

	}
}

Подскажите, пожалуйста, как быть?


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

Старый 07.02.2008, 21:22
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 2  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
Простите меня конечно, но как можно усмотреть в ссылке на объект байты лично для меня остается совершенно непонятным. Так же для меня совершенно непонятно, закой черт вам byteArray для передачи даных? Почему нельзя передать там через сокет или через post данные о нужном объекте? О мой мозг...

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

Регистрация: Apr 2007
Сообщений: 143
Отправить сообщение для NePridymal с помощью ICQ
ну как можно усмотреть байты в ссылке на объект - тут уж вопрос не ко мне... Но по документации так. А зачем сохранять весь объект? - ну в первую очередь это пожелание заказчика, мотивированое тем, что класс объекта еще не полностью спроектирован и может неоднократно расширятся... Поэтому хочеться сделать сохранение всего объекта класса, независимо от содержания.

Да, нарыл кое-что оп этому вопросу. Вот сижу разбираюсь с таким интерфейсом как IExternalizable ... И функцией flash.net.registerClassAlias ... надеюсь копаю в правильном направлении..

Старый 07.02.2008, 21:48
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 4  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
У вас 2й класс даже не наследуется от Object не говоря о смысле приведения его к AMF формату. Просто так то объекты не посылаются? Вообще каким образом вы себе это представляете. Взяли объект из памяти, переслали его васе в америку и распаковали обратно в память? Имхо у вас кардинально неверный подход к задаче. Если у вас будет расширяемый класс, который еще не дописан. Создайте интерфейс с перечнем обязательных свойств и методов.

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

Регистрация: Apr 2007
Сообщений: 143
Отправить сообщение для NePridymal с помощью ICQ
Взял объект из памяти, запаковал и отослал на сервер. Там он хранится. Когда зашел Вася со своего компа по ссылке определенной, открылась свф-ка, в которой есть такой класс, она загрузила в себя объект с сервера и привела его тип к типу необходимого класса. Еще раз говорю, что это придумал не я. Мне просто надо это реализовать....

Кстати, решение одной проблемы было найдено. Немного неправильно был написан код класса 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();
		}

	}
}

Старый 07.02.2008, 22:37
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от NePridymal
Еще раз говорю, что это придумал не я. Мне просто надо это реализовать....
И кто это придумал?

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

Регистрация: Apr 2007
Сообщений: 143
Отправить сообщение для NePridymal с помощью ICQ
Ну... кто придумал... Американцы... А мы тут реализуем...

Старый 08.02.2008, 16:17
pswnew вне форума Посмотреть профиль Отправить личное сообщение для pswnew Найти все сообщения от pswnew
  № 8  
Ответить с цитированием
pswnew

Регистрация: Feb 2008
Сообщений: 2
Так оно ж работает! Копирует...
А как бы передавать на сервер еще?
Ну можно передавать данные (строку) структурированные в XML и так целиком в БД и хранить, потом эту строку отдавать клиенут, он ее в е4х переведет и применит себе необходимые параметры.

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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