Comment faire URL Loader retourner un jeton Async?
-
21-09-2019 - |
Question
Je tentais de récupérer des données binaires sur HTTP pour mon application Flex, et dans courrais quelques pierres d'achoppement. HTTPService ne semble pas traiter des données binaires bien, les gens ont dit utiliser URLLoader. Mais URLLoader ne pas l'interface agréable AsyncToken / IResponder qui fournit HTTPService.
Alors, je l'ai fait quelques recherches et ne pouvait pas trouver quelqu'un étendre URLLoader pour fournir ce type de fonctionnalité. Je suis allé de l'avant et a pris un coup de couteau à moi-même: http://pastebin.com/d7369d0e0
Fondamentalement, il encapsule un URLLoader et un AsyncToken et cartes, les COMPLETE IO_ERROR et les événements SECURITY_ERROR de URLLoader aux résultats / défauts qui sont soulevées sur le AsyncToken.
Utilisation de base:
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());
}
Est-ce la bonne façon d'aborder le problème? Y at-il des solutions existantes? J'aimerais entendre les commentaires.
Merci,
Karthik
La solution
Utilisez le resultFormat = text
sur le HTTPService
puis créer un nouveau ByteArray
et appeler writeUTFBytes
pour écrire le texte à partir du résultat de HTTPService
au ByteArray
. Ensuite, vous devriez être en mesure de définir que ByteArray
à un appel ou SWFLoader.source
Loader.loadBytes
.
Autres conseils
J'ai essayé votre solution James avec une application AIR 1.5, mais je reçois l'erreur suivante lorsque je mets le ByteArray sur mon SWFLoader.source. Des idées? Je pensais que je l'ai lu quelque part que AIR change les en-têtes HTTP et cela peut être la cause? Merci Ben.
[DEBUG] mx.messaging.Channel envoi canal 'de direct_http_channel' message: (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' connecté producteur. [INFO] mx.messaging.Producer '4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72' producteur accusé de «3044E76C-CF0E-2D5F-96BE-74CFF62098B0. [INFO] mx.rpc.http.HTTPService Décodage réponse HTTPService [DEBUG] mx.rpc.http.HTTPService Traitement message de réponse HTTPService: (mx.messaging.messages :: AcknowledgeMessage) # 0 body = « yoya Erreur # 2044: Unhandled IOErrorEvent :. text = Erreur # 2124:. fichier Loaded est un type inconnu