Wie machen URLLoader eine AsyncToken zurückkehren?
-
21-09-2019 - |
Frage
Ich habe versucht, binäre Daten abzurufen über HTTP für meine Flex-Anwendung, und lief in einige Stolpersteine. HTTPService- nicht gut mit binären Daten zu beschäftigen scheint, sagten die Leute URLLoader zu verwenden. Aber URLLoader nicht den schönen AsyncToken / IResponder Schnittstelle hat, dass Httpservice bietet.
Also, ich habe einige der Suche und konnte niemanden finden URLLoader Ausweitung dieser Art von Funktionalität bereitzustellen. Ich ging weiter und nahm einen Stich an ihn selbst: http://pastebin.com/d7369d0e0
Im Grunde wickelt es einen URLLoader und eine AsyncToken und bildet die gesamte, IO_ERROR und SECURITY_ERROR Ereignisse von URLLoader zu den Ergebnissen / Störungen, die auf dem AsyncToken geraist werden.
Grund Nutzung:
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());
}
Ist dies der richtige Weg, um das Problem zu nähern? Gibt es bestehende Lösungen? Ich würde gerne Feedback hören.
Danke,
Karthik
Lösung
Mit dem resultFormat = text
auf dem HTTPService
und erstellen Sie eine neue ByteArray
und Call writeUTFBytes
den Text aus dem HTTPService
Ergebnis an die ByteArray
zu schreiben. Dann sollten Sie in der Lage sein, dieses ByteArray
zu einem SWFLoader.source
oder Anruf Loader.loadBytes
einzustellen.
Andere Tipps
Ich habe Ihre Lösung James mit einem AIR 1.5 App versucht, aber ich bekomme die folgende Fehlermeldung, wenn ich die ByteArray auf meinem SWFLoader.source gesetzt. Irgendwelche Ideen? Ich dachte, ich habe irgendwo gelesen, dass AIR ändert sich die HTTP-Header und dies die Ursache sein? Dank Ben.
[DEBUG] mx.messaging.Channel 'direct_http_channel' Kanal sendet Nachricht: (Mx.messaging.messages :: HTTPRequestMessage) # 0 body = (Objekt) # 1 clientId = (null) content = "application / x-www-form-urlencoded" destination = "Default" headers = (Object) # 2 httpheaders = (Objekt) # 3 messageId = "3044E76C-CF0E-2D5F-96BE-74CFF62098B0" method = "GET" recordHeaders = false Zeitstempel = 0 timeToLive = 0 url = " http://www.myurl.com/test.jpg " [INFO] mx.messaging.Producer '4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72' Erzeuger verbunden. [INFO] mx.messaging.Producer '4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72' Hersteller anerkennen von '3044E76C-CF0E-2D5F-96BE-74CFF62098B0'. [INFO] mx.rpc.http.HTTPService Dekodierung HTTPService- Antwort [DEBUG] mx.rpc.http.HTTPService Verarbeitung HTTPService- Antwortnachricht: (Mx.messaging.messages :: AcknowledgeMessage) # 0 body = „Yoya Error # 2044: Unbehandelte IOErrorEvent :. text = Error # 2124:. Loaded-Datei ist ein unbekannter Typ