Как заставить URLLoader возвращать AsyncToken?

Я пытался извлечь двоичные данные через 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());
}

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

Спасибо,

Картик

2 ответа

Решение

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

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

[DEBUG] mx.messaging.Channel 'direct_http_channel' канал, отправляющий сообщение: (mx.messaging.messages::HTTPRequestMessage)#0 body = (Object)#1 clientId = (null) contentType = "application/x-www-form-urlencoded" destination = "DefaultHTTP" headers = (Object)#2 httpHeaders = (Object)#3 messageId = "3044E76C-CF0E-2D5F-96BE-74CFF62098B0" method = "GET" recordHeaders = false timestamp = 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 body = "ÿØÿà Ошибка #2044: UnhandledOvent:. text= Ошибка #2124: загруженный файл неизвестного типа.

Другие вопросы по тегам