我正在尝试使用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通知。有没有办法正确处理具有相同类型但来自不同对象和不同函数侦听器的事件?
答案 0 :(得分:0)
尝试将侦听器设置为流而不是文件:
// Changed the 'file' with 'stream'
stream.addEventListener(Event.COMPLETE, uploadComplete, false, 0, true);