【问题标题】:Flash AIR 3.2 Android Captive Runtime URLLoader throws stream error #2032 local fileFlash AIR 3.2 Android Captive Runtime URLLoader 引发流错误 #2032 本地文件
【发布时间】:2012-11-07 22:52:37
【问题描述】:

以下代码是我正在处理的一个更大项目的 sn-p。问题是当我在 Flash CS6 中测试应用程序时,urlLoader 完美读取 25Notes.txt,但是当我尝试在我的 Android 设备(HTC Incredible)上调试应用程序(通过 Flash 内置的“调试>调试电影>通过 USB 在设备上”)时引发流错误 #2032。

我正在使用 Flash CS6 从 AIR 3.2 部署带有 Captive Runtime 的应用程序,我的项目被组织起来,没有多余的文件或文件夹。

如果您有任何见解或建议,以及需要更多解释或代码,请告诉我。

我也不确定 Flash CS6 中的 Captive Runtime 是打包根项目文件夹中的所有本地文件,还是只打包应用程序中使用的文件,或者根本不打包。任何有关这方面的信息也将不胜感激。

    var FILE_LIST_PATH:String = "/25Notes/25Notes.txt";
var mp3List:Array = new Array();

LoadFile();

function LoadFile()
{
    var urlRequest:URLRequest = new URLRequest(FILE_LIST_PATH);
    var urlLoader:URLLoader = new URLLoader();

    urlLoader.addEventListener(Event.COMPLETE, processTextFile);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
    urlLoader.load(urlRequest);
}

function onIOError(e:IOErrorEvent){
    trace("can't load file list:   " + e);
}


function processTextFile(event:Event):void
{
    var loader:URLLoader = URLLoader(event.target);
    var textFile:String = loader.data;
    mp3List = textFile.split("\n");
    for (i=0;i<mp3List.length;i++){
        trace(mp3List[i],i);
    }
}

这是 IOError 跟踪返回的内容:

can't load file list:   [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: app:/25Notes/25Notes.txt" errorID=2032]

我完全被难住了。请帮忙!!

【问题讨论】:

  • 您是否尝试过松开第一个正斜杠?您是否通过以下方式添加了要添加到包中的所需文件:文件 > AIR for XXX 设置 > 常规选项卡 - 这里有“包含的文件:”列表,您可以将应用程序需要打包的任何文件添加到该列表中。

标签: android actionscript-3 flash air


【解决方案1】:

该文件是否在运行时由应用程序保存并且您正在尝试检索它?如果不是,则该 URL 不正确。 app:/ 目录是设备上的 applicationStorageDirectory,而不是应用程序本身的位置。您需要将 txt 文件嵌入为一个类并以这种方式访问​​它

[Embed(source="assets/ui/images/phone/menu-myvideos-active-160.png")]
var MyVideosActive160:Class;

这是我目前正在完成的一个项目中的一些内容。这嵌入了一个图像,并允许我之后访问它。要访问它,我只需这样做

var bmp:Bitmap = new MyVideosActive160();

如果您不嵌入,我认为您实际上无法访问该文件。必须嵌入需要包含在应用程序中的每个文件。

如果您在某个时间点在运行时保存文件,您会希望这样做

var path:String = new File(new File.applicationStorageDirectory.resolvePath("/25Notes/25Notes.txt").nativePath).url;

这将输出一个file:/// URL,而不是使用app:/ 的URL。我正在使用这种方法在我的应用程序中播放下载的视频。 Adobe 应该在 SDK 中内置了一个糟糕的解决方法,但这是我们必须处理的。

【讨论】:

  • 感谢您的回复!我尝试使用您的嵌入想法并且它有效!有没有办法有效地嵌入 25 个 mp3 文件并将它们放入数组中?
  • 同理。为每个文件创建一个单独的Class(不幸的是,无法解决这个问题),实例化该类的一个新实例(可能是Sound 对象)并将它们推送到数组中。
  • 哦,要明确一点,这与强制运行时间完全无关。您需要对 SWF 或标准 AIR 应用程序执行相同的操作。请注意您的文件大小。嵌入会杀死它。
  • @Apocalyptic0n3 - 你确定吗:“如果你不嵌入,我不相信你可以实际访问该文件。需要包含在应用程序中的每个文件都必须嵌入。” - 在我的 AIR 项目中,我将文件包含在 APK 中,我可以毫不费力地加载它们。
  • 另一件事是通过嵌入增加了应用程序的文件大小,当您要更改任何内容或想要添加另一个“无法加载”的文件时,您必须发布和重新打包应用程序.
猜你喜欢
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多