0

我正在尝试使用 Actionscript (adobe air) 为 ios 制作一个示例应用程序。但是我在事件/事件处理方面遇到了问题。我的应用程序基本上让用户可以选择拍照或从相机胶卷中选择一张上传到服务器。如果用户决定拍照,我必须将该照片保存到设备的相机胶卷中。我遇到问题的代码部分如下:

private function readMediaData():void {
    //set up some variables and data

    var file:File = tempDir.resolvePath(filename);
    var stream:FileStream = new FileStream(); 
    stream.open(file, FileMode.WRITE); 
    stream.writeBytes(imageBytes); 
    stream.close();

    file.addEventListener(Event.COMPLETE, uploadComplete, false, 0, true);

    //upload file here
}

private function uploadComplete(event:Event):void {
    //selectedImage is the MediaPromise
    if (selectedImage.file == null) {
         loader = new Loader();
         loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleted);
         loader.loadFilePromise(selectedImage);
    }
}

private function loaderCompleted(event:Event):void {
    //save image
}

上传工作正常,但是一旦上传完成,我会在 loaderCompleted 和 uploadComplete 之间出现一个无限循环,导致多个图像被上传到服务器。一旦文件进入 uploadComplete 函数,我尝试删除文件的侦听器,但仍然得到相同的结果。我的猜测是,一旦注册了加载程序的事件侦听器,它就会触发一个 Event.COMPLETE 通知,这两个方法(或对象)仍然可以识别。有没有办法正确处理具有相同类型但来自不同对象和不同函数侦听器的事件?

4

1 回答 1

0

尝试将侦听器设置为流而不是文件:

// Changed the 'file' with 'stream'
stream.addEventListener(Event.COMPLETE, uploadComplete, false, 0, true);
于 2012-08-01T08:16:45.103 回答