Как заставить URLLoader возвращать AsyncToken? - PullRequest
0 голосов
/ 24 декабря 2009

Я пытался извлечь двоичные данные по HTTP для моего приложения Flex и наткнулся на некоторые камни преткновения. HTTPService, похоже, плохо справлялся с двоичными данными, говорили люди, использующие URLLoader. Но URLLoader не имеет приятного интерфейса AsyncToken / IResponder, который обеспечивает HTTPService.

Итак, я провел поиск и не смог найти никого, кто бы расширял URLLoader для обеспечения такого рода функциональности. Я пошел вперед и сам нанес удар: http://pastebin.com/d7369d0e0

В основном он оборачивает URLLoader и AsyncToken и отображает события COMPLETE, IO_ERROR и SECURITY_ERROR из URLLoader на результаты / ошибки, которые возникают в AsyncToken.

Основное использование:

var tidbitLoader:AsyncURLLoader = new AsyncURLLoader();
tidbitLoader.dataFormat = URLLoaderDataFormat.BINARY;

var asyncToken:AsyncToken = tidbitLoader.load(new URLRequest("http://localhost/SampleTidbit.swf"));

asyncToken.addResponder(this);

public function result(resultEvent:Object):void
{
    trace("result");
}

public function fault(faultEvent:Object):void 
{
    var fault:FaultEvent = faultEvent as FaultEvent;
    trace("fault: " + fault.toString());
}

Это правильный способ решения проблемы? Существуют ли существующие решения? Я хотел бы услышать обратную связь.

Спасибо

Karthik

Ответы [ 2 ]

1 голос
/ 30 декабря 2009

Используйте resultFormat = text на HTTPService, а затем создайте новый ByteArray и вызовите writeUTFBytes для записи текста из результата HTTPService в ByteArray. Тогда вы сможете установить ByteArray на SWFLoader.source или позвонить Loader.loadBytes.

0 голосов
/ 28 января 2010

Я опробовал ваше решение Джеймс с приложением AIR 1.5, но я получаю следующую ошибку, когда устанавливаю ByteArray на свой SWFLoader.source. Есть идеи? Я думал, что где-то читал, что AIR меняет заголовки HTTP, и это может быть причиной? Спасибо Бен.

[DEBUG] mx.messaging.Channel 'direct_http_channel' канал отправки сообщения: (Mx.messaging.messages :: HTTPRequestMessage) # 0 body = (Объект) # 1 clientId = (ноль) contentType = "application / x-www-form-urlencoded" destination = "DefaultHTTP" заголовки = (Объект) # 2 httpHeaders = (Объект) # 3 messageId = "3044E76C-CF0E-2D5F-96BE-74CFF62098B0" method = "GET" recordHeaders = false отметка времени = 0 timeToLive = 0 url = "http://www.myurl.com/test.jpg" [INFO] mx.messaging.Producer '4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72' подключен производитель. [INFO] mx.messaging.Producer '4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72' производитель признает '3044E76C-CF0E-2D5F-96BE-74CFF62098B0'. [INFO] mx.rpc.http.HTTPService Декодирование ответа HTTPService [DEBUG] mx.rpc.http.HTTPService Обрабатывает ответное сообщение HTTPService: (mx.messaging.messages :: AcknowledgeMessage) # 0 тело = "ÿØÿà Ошибка № 2044: необработанное событие IOErrorEvent :. text = Ошибка # 2124: загруженный файл неизвестного типа.

...