繁体   English   中英

AS3 for Air事件问题

[英]AS3 for Air events issues

我在解决为什么在从另一个函数中调用函数时某些事件不会触发时遇到了一些问题。

这是发生的事情,我无法弄清楚原因:
当应用程序存储目录中没有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");
            }

        }           
    }
    }
    }

正如文件所说:

同步打开File对象时,调用程序会在从基础文件读取或写入所请求的数据时暂停。

在同步写入操作完成后添加侦听器。

我实际上已经想到了这个。 您可以在关闭流之后重新初始化对readcamfile的调用,而不是在writecamfile上添加事件列表器:

fileStream.close();
readcamfile();

如果你确实需要保留事件:你的函数中的事件参数你可能需要像这样重新启动函数:

readcamfile(null);

因为该函数需要一个参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM