我在解决为什么在从另一个函数中调用函数时某些事件不会触发时遇到了一些问题。
这是发生了什么,我无法弄清楚原因:
当应用程序存储目录中没有test.xml文件writecamfile()执行时,但似乎oncomplete()函数永远不会触发。预加载器仍然可见,跟踪不起作用。
如果文件存在,readcamfile()触发就好了,oncomplete会隐藏预加载器并返回跟踪。
我的问题是为什么没有test.xml文件时oncomplete()不会触发? 我的逻辑是检查文件是否存在,创建它然后读取它。
非常感谢任何指针。 提前谢谢你,祝你有个美好的一天!
贝
package util
{
import flash.filesystem.*;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.*;
import flash.display.*;
import flash.events.Event;
import flash.events.MediaEvent;
import flash.events.MouseEvent;
import flash.media.CameraUI;
import flash.media.MediaPromise;
import flash.media.MediaType;
import fl.containers.*;
import fl.controls.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequestMethod;
dynamic public class cam5 extends MovieClip
{
public var preloader:MovieClip;
public function cam5()
{
var tmp_file:File = File.applicationStorageDirectory.resolvePath('test.xml');
if (tmp_file.exists)
{// File exists
preloader.visible = true;
readcamfile(null); // check settings from the camera file
} else
{// File doesn't exist
writecamfile();
preloader.visible = true;
}
function readcamfile(event:Event):void
{
var loader:URLLoader = new URLLoader(new URLRequest(File.applicationStorageDirectory.resolvePath('test.xml').url));
loader.addEventListener(Event.COMPLETE, oncomplete);
}
function writecamfile():void
{
var xmlstr:XML = <images></images>;
var file:File = File.applicationStorageDirectory.resolvePath("test.xml");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
outputString += xmlstr.toXMLString();
fileStream.writeUTFBytes(outputString);
fileStream.addEventListener(Event.COMPLETE, readcamfile);
fileStream.close();
}
function oncomplete(event:Event):void
{
var xml:XML = new XML(event.currentTarget.data);
var chkcount : Boolean = (xml.children().length() > 0);
if(chkcount)
{
var xmlcount:int = xml.children().length(); //test children count
var camXMLList:XMLList = xml.img;
var count:int = camXMLList.length(); //test list count
for(var i:int=0; i<xmlcount; i++)
{
var _row = xml.children()[i];
}
preloader.visible = false;
trace(_row.text()+'\n'+xmlcount+'\n'+count);
}else
{
preloader.visible = false;
trace("no images");
}
}
}
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
我实际上已经想到了这个。 您可以在关闭流之后重新初始化对readcamfile的调用,而不是在writecamfile上添加事件列表器:
fileStream.close();
readcamfile();
如果确实需要保留事件:函数中的事件参数可能需要重新启动函数,如下所示:
readcamfile(null);
因为该函数需要一个参数