【问题标题】:How to make URLLoader return an AsyncToken?如何让 URLLoader 返回一个 AsyncToken?
【发布时间】:2009-12-24 20:28:17
【问题描述】:

我试图通过 HTTP 为我的 Flex 应用程序检索二进制数据,但遇到了一些绊脚石。 HTTPService 好像不太好处理二进制数据,有人说用 URLLoader。但是 URLLoader 没有 HTTPService 提供的漂亮的 AsyncToken/IResponder 接口。

所以,我进行了一些搜索,但找不到任何扩展 URLLoader 来提供这种功能的人。我自己尝试了一下:http://pastebin.com/d7369d0e0

基本上,它包装了一个 URLLoader 和一个 AsyncToken,并将来自 URLLoader 的 COMPLETE、IO_ERROR 和 SECURITY_ERROR 事件映射到在 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());
}

这是解决问题的正确方法吗?有现成的解决方案吗?我很想听听反馈。

谢谢,

卡提克

【问题讨论】:

  • 所以你要读取的二进制数据是SWF?但是您不想只运行 SWF(就像 SWFLoader 或 Loader 一样)?您是否尝试使用 HTTPService 并将 resultFormat 设置为文本?
  • 嗨詹姆斯,我确实尝试使用 HTTPService 和 resultFormat 作为文本,但是当我将 SWFLoader.source 设置为该调用的结果时,SWF 不会加载!当我用我的 AsyncURLLoader 尝试它并返回一个 ByteArray 时,它可以工作。
  • 也许您需要尝试使用 writeUTFBytes 或其他方式创建一个 ByteArray?
  • 为了关闭它,我在下面提出了一个更简洁的答案。

标签: apache-flex flash actionscript-3 urlloader asynctoken


【解决方案1】:

HTTPService 上使用resultFormat = text,然后创建一个新的ByteArray 并调用writeUTFBytesHTTPService 结果中的文本写入ByteArray。然后你应该可以将ByteArray 设置为SWFLoader.source 或调用Loader.loadBytes

【讨论】:

    【解决方案2】:

    我已经使用 AIR 1.5 应用程序尝试了 James 的解决方案,但是当我在 SWFLoader.source 上设置 ByteArray 时出现以下错误。有任何想法吗?我以为我在某处读到 AIR 更改了 HTTP 标头,这可能是原因吗?谢谢本。

    [DEBUG] mx.messaging.Channel 'direct_http_channel' 频道发送消息: (mx.messaging.messages::HTTPRequestMessage)#0 身体 = (对象)#1 clientId = (null) contentType = "应用程序/x-www-form-urlencoded" 目的地=“默认HTTP” 标头=(对象)#2 httpHeaders = (对象)#3 messageId = "3044E76C-CF0E-2D5F-96BE-74CFF62098B0" 方法=“获取” 记录标头 = 假 时间戳 = 0 生存时间 = 0 网址 = "http://www.myurl.com/test.jpg" [信息] mx.messaging.Producer '4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72' 生产者已连接。 [信息] 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::AcknowledgeMes​​sage)#0 身体=“ÿØÿà 错误 #2044:未处理的 IOErrorEvent:。 text=Error #2124: 加载的文件是未知类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2020-09-29
      • 2013-11-18
      • 2012-10-24
      相关资源
      最近更新 更多