apache-flex Mac OS Sierra上的Adobe AIR应用程序中出现流错误#2032,需要帮助

kx5bkwkv  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(120)

我正在尝试帮助一个客户解决Adobe AIR应用程序在Mac OS Sierra上突然停止工作的问题。我自己还没有开发该应用程序,所以我正在尽我所能来解决这个问题。它本质上是一个用Actionscript 3编写的Flex应用程序。当我调试时,我可以看到我得到以下错误:

[错误]错误#2032:数据流错误。

应用程序的工作方式是首先向服务器发出一个Web请求,然后得到一个包含多首歌曲的XML。
之后,应用程序下载XML结果中的第一首歌曲并开始播放。
当第一首歌曲开始播放时,应用程序会下载XML列表中的第二首歌曲,当下载完成时,它会开始下载下一首歌曲,依此类推。正在下载的文件似乎相当大,有几MB。
因此,第一次下载工作正常,但所有其他曲目下载失败,流错误#2032。似乎我没有从失败的请求中得到任何响应头,只有第一个。我在服务器上有一个crossdomain.xml。
这个应用程序在Mac OS X El Capitan和Windows上运行得很好,但是在Sierra上我遇到了这个错误。代码并不复杂,它使用URLLoader发出API URL请求,并将文件保存到磁盘。我也尝试过使用URLStream代替,同样的问题。
下面是一些代码举例:

public function downloadTrack(track:Object, storeName:String, apiKey:String):void {

        this.setCurrentTrack(track);

        this.urlParameters.storeName = storeName;
        this.urlParameters.keystring = apiKey;

        this.urlLoader = new URLLoader();
        this.urlLoader.dataFormat = URLLoaderDataFormat.BINARY;

        this.urlRequest = new URLRequest("/api/" + 'download/' + 
        this.currentTrack.id + "?time=" + new Date().getTime());
        this.urlRequest.method = URLRequestMethod.POST;
        this.urlRequest.data = this.urlParameters;

        this.addEventListeners();

        this.urlLoader.load(this.urlRequest);

    }

    private function loaded(e:Event):void {
        this.fileData = e.target.data;
        writeFile();
    }

    private function writeFile():void {
        var filePath:String = this.currentTrack.md5 + '.ogg';
        var cacheFile:File = this.downloadDirectory.resolvePath('.' + filePath);

        this.fileStream.addEventListener(Event.CLOSE, saveReady);
        this.fileStream.openAsync(cacheFile, FileMode.WRITE);
        this.fileStream.writeBytes(fileData,0,fileData.length);
        this.fileStream.close();
    }

在addEventListeners()方法中,添加了URLLoader的事件侦听器,并且是该urlLoader触发IOError。
一件奇怪的事情已经发生了两次,那就是应用程序突然开始正常工作,并连续下载所有文件。然后几分钟后,它又开始工作,什么都不工作。我真的很难理解错误在哪里。我不是Adobe AIR/FlexMaven,所以也许你能给我指出正确的方向?我几乎要放弃这个了。
谢谢你!

6jygbczu

6jygbczu1#

  • 尝试更改目标,可能您没有写入该目标的权限。
  • 使用最新的AIR SDK

会更好,如果你将分享项目的地方,它复制,所以我可以检查我的机器

相关问题