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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top