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

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

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

Регистрация: Apr 2012
Сообщений: 44
По умолчанию Иногда не отображаются изображения

Здравствуйте.
У меня в приложении есть 2 области: рабочая и список с превьюшками изображений.
Изображение описывается классом (все лишнее вырезано):
Код AS3:
 
public class PrintItem
    {
        [Bindable]
        /**
         * The URL of the preview item image.
         */
        public var source:Object = "";
     }
Поле source типа Object для обратной совместимости - ранее было String (содержало ссылку на изображение в web), теперь может так же принимать значение типа ByteArray.

Загрузка ByteArray происходит следующим образом:
Код AS3:
private function requestPreviews():void
	{
		for each (var item:PrintItem in model.product.items)
		{
			// we create new loader for every preview file, cause we can't predict their number
			var request:URLRequest = new URLRequest("url для загрузки");
 
			request.data = new URLVariables("file=" + item.source);
			request.method = URLRequestMethod.GET;
 
			var loader:ImageLoader = new ImageLoader(item.source as String);
			loader.dataFormat = URLLoaderDataFormat.BINARY;
			loader.addEventListener(Event.COMPLETE, requestPreviewFileComplete);
			loader.load(request);
		}
	}
Класс ImageLoader - обычный Loader, который хранит идентификатор изображения, которое он загружает.

Код AS3:
private function requestPreviewFileComplete(event:Event):void
{
	for each (var item:PrintItem in model.product.items)
	{
		if(item.source.toString() == (event.target as ImageLoader).filePath)
			item.source = event.target.data as ByteArray;
	}
}
И в рабочей области и в списке превьюшек просто назначается поле source для компонента Image, типа:
Код AS3:
<Image source="{item.source}"/>
, item - PrintItem.

Проблема заключается в следующем: иногда вместо изображения не отображаются (висит картинка, как при недоступном изображении). Можно было бы подумать на проблемы с сетью, но бывает, что изображения отображаются в списке превьюшек, но в рабочей области их по-прежнему нет!

Когда поле source в классе PrintItem было объектом класса String и содержала прямую ссылку на файл изображения, таких проблем не было.

Может быть есть какие-то подводные камни при работе стандартного компонента Image с ByteArray или при приведении Object к ByteArray?


Последний раз редактировалось Sonet; 20.05.2013 в 15:38.
Старый 23.05.2013, 23:13
qweX вне форума Посмотреть профиль Отправить личное сообщение для qweX Посетить домашнюю страницу qweX Найти все сообщения от qweX
  № 2  
Ответить с цитированием
qweX

Регистрация: Feb 2003
Адрес: gplus.to/qweX
Сообщений: 43
Отправить сообщение для qweX с помощью ICQ
Можно же ведь кодировать source в ByteArray с помощью свойств writeUTFBytes и декодировать readUTFBytes, даже декодировать не нужно, экземпляр Image при ссылке на свойство source проглотит ByteArray и отобразит. Также можно конвертировать в объекты writeObject и readObject.

Старый 26.05.2013, 20:36
Sonet вне форума Посмотреть профиль Отправить личное сообщение для Sonet Найти все сообщения от Sonet
  № 3  
Ответить с цитированием
Sonet

Регистрация: Apr 2012
Сообщений: 44
Сделал поле source объектом ByteArray. Т.е. приведение типов теперь быть не должно. Надеюсь поможет.

Цитата:
Для загрузки изображений в приложение в виде массива байт необходимо наличие кроссдоменных файлов (crossdomain.xml) на соответствующих хостах.
Вот это вариант. Загрузка crossdomain файла ведь происходит асинхронно?

Старый 27.05.2013, 02:17
Sonet вне форума Посмотреть профиль Отправить личное сообщение для Sonet Найти все сообщения от Sonet
  № 4  
Ответить с цитированием
Sonet

Регистрация: Apr 2012
Сообщений: 44
Цитата:
Сообщение от okouser Посмотреть сообщение
Проверка crossdomain.xml осуществляется неявно.
В некоторых случаях надо задавать явное расположение файла политик с помощью flash.system.Security.loadPolicyFile.
Так и делаю (прим. задаю явно). Просто этот момент мне не слишком понятен. Однако насколько я понимаю, этот файл (crossdomain.xml) все равно загружается? Если это происходит асинхронно, то возможно, что изображения грузятся приложением раньше, чем crossdomain.xml - отсюда и сбой.

Старый 27.05.2013, 11:29
qweX вне форума Посмотреть профиль Отправить личное сообщение для qweX Посетить домашнюю страницу qweX Найти все сообщения от qweX
  № 5  
Ответить с цитированием
qweX

Регистрация: Feb 2003
Адрес: gplus.to/qweX
Сообщений: 43
Отправить сообщение для qweX с помощью ICQ
мне кажется тут закралась мелкая ошибка, а именно в объекте source класса PrintItem, т.к. в попытке получить строку у объекта item.source.toString() вы получите вывод типа объекта, а не его содержание. Поэтому условие будет не выполнено. Обращайтесь к свойству объекта. И потом, этот же объект используется по другому назначению, принимая ByteArray.

Старый 27.05.2013, 13:25
Sonet вне форума Посмотреть профиль Отправить личное сообщение для Sonet Найти все сообщения от Sonet
  № 6  
Ответить с цитированием
Sonet

Регистрация: Apr 2012
Сообщений: 44
Цитата:
Сообщение от qweX Посмотреть сообщение
мне кажется тут закралась мелкая ошибка, а именно в объекте source класса PrintItem, т.к. в попытке получить строку у объекта item.source.toString() вы получите вывод типа объекта, а не его содержание. Поэтому условие будет не выполнено. Обращайтесь к свойству объекта. И потом, этот же объект используется по другому назначению, принимая ByteArray.
Но тогда проблема наблюдалась бы при каждом запуске. А она наблюдается лишь в 1% случаев.

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

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

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


 


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


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