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

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

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

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
По умолчанию SharedObject и обработка событий NetStatusEvent

Столкнулся со следующей проблемой:
нужно записать данные на диск пользователя, делаю это с помощью метода flush(), затем проеряю константы, возвращаемые методом, создаю обработчик исключения, а также, если в настройках FlashPlayer'а у пользователя прописан меньший объем байт для хранения данных, регистрирую приемник событий для NetStatusEvent. Отслеживаю информацию из свойства code, событийного объекта info, для того, чтобы проверить разрешил ли пользователь увеличить объем для хранения информации.
А проблема заключается в том, что диспетчеризация события NetStatusEvent.NET_STATUS, по непонятной мне причине не происходит!
Вот код:

Код AS3:
package
{
	import flash.display.*;
	import flash.net.*;
	import flash.events.*;
 
 
	public class SharedExample extends Sprite
	{
 
 
		public function SharedExample()
		{
			super();
			var sharedObject:SharedObject=SharedObject.getLocal("SomeObject");
			sharedObject.data.string="Property string has some value";
			try
			{
				var writeResult:String=sharedObject.flush(10000);
				if(writeResult==SharedObjectFlushStatus.PENDING)
				{
					trace("PENDING");
					sharedObject.addEventListener(NetStatusEvent.NET_STATUS, netStatusListener);
				}
				else if(writeResult==SharedObjectFlushStatus.FLUSHED)
				{
					trace("FLUSHED");
				}
			}
			catch(error:Error)
			{
				trace("ERROR");
			}
		}
 
		private function netStatusListener(e:NetStatusEvent):void
		{
			if(e.info.code=="SharedObject.Flush.Success")
			{
				trace("SUCCESS");
			}
			else if(e.info.code=="SharedObject.Flush.Failed")
			{
				trace("FAILED");
			}
		}
	}
}
Тестировал его в средах FlashPlayer (последняя версия и в качестве плагина для браузера и standalone) не работает!
В ходе эксперимента, также заметил интересную особенность, а именно:

Код AS3:
var sharedObject:SharedObject=SharedObject.getLocal("SomeObject");
sharedObject.data.string="Property string has some value";
try
{
	var writeResult:String=sharedObject.flush(10000);
	if (writeResult==SharedObjectFlushStatus.PENDING)
	{
		trace("PENDING");
		sharedObject.addEventListener(NetStatusEvent.NET_STATUS, netStatusListener);
	}
	else if (writeResult==SharedObjectFlushStatus.FLUSHED)
	{
		trace("FLUSHED");
	}
}
catch (error:Error)
{
	trace("ERROR");
}
 
 
function netStatusListener(e:NetStatusEvent):void
{
	if (e.info.code=="SharedObject.Flush.Success")
	{
		trace("SUCCESS");
	}
	else if (e.info.code=="SharedObject.Flush.Failed")
	{
		trace("FAILED");
	}
}
в этом случае диспетчеризация NetStatus происходит.
Смотрим пример ниже, чуток модифицирован

Код AS3:
createShared();
 
function createShared():void
{
var sharedObject:SharedObject=SharedObject.getLocal("SomeObject");
sharedObject.data.string="Property string has some value";
try
{
	var writeResult:String=sharedObject.flush(10000);
	if (writeResult==SharedObjectFlushStatus.PENDING)
	{
		trace("PENDING");
		sharedObject.addEventListener(NetStatusEvent.NET_STATUS, netStatusListener);
	}
	else if (writeResult==SharedObjectFlushStatus.FLUSHED)
	{
		trace("FLUSHED");
	}
}
catch (error:Error)
{
	trace("ERROR");
}
}
 
 
function netStatusListener(e:NetStatusEvent):void
{
	if (e.info.code=="SharedObject.Flush.Success")
	{
		trace("SUCCESS");
	}
	else if (e.info.code=="SharedObject.Flush.Failed")
	{
		trace("FAILED");
	}
}
а когда sharedObject создается в теле метода диспетчеризации не происходит.

Какие будут мысли по существу приведенных выше доводов? Буду весьма благодарен за дельные и конструктивные советы.

Добавлено через 52 минуты
Вопрос снимается. Видимо, после выполнения метода в котором объявляется sharedObject ссылка на него из программы удаляется, и деактивируется зарегистрированный приемник для событий NetStatusEvent, проблем нет, когда ссылка на SharedObject хранится в переменной экземпляра класса.
__________________
04.08 1516 23:42


Последний раз редактировалось Мечтатель; 26.10.2009 в 20:03.
Создать новую тему   Часовой пояс GMT +4, время: 15:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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