1

我正在尝试将 XML 数据保存到带有 AIR 3.4 for iOS 的 iPad 4 中,但真的不知道这是否有效。显然没有事件被触发。任何帮助是极大的赞赏。

    private function saveData(e:MouseEvent):void {




        var name:String = AssetManager.SAVE_ANNOTATIONS_NAME            
        var file:File = new File()              
        file = File.applicationStorageDirectory.resolvePath(name + "xml");
        var xml:XML = _canvas.getObjectData(FormatType.DEGRAFA);            
        var fileStream:FileStream = new FileStream();
        fileStream.open(file, FileMode.WRITE);
        fileStream.writeUTF(xml.toString());


        fileStream.addEventListener(ProgressEvent.PROGRESS, onFileStream);
        fileStream.addEventListener(Event.ACTIVATE, onFileStream);
        fileStream.addEventListener(Event.OPEN, onFileStream);
        fileStream.addEventListener(Event.DEACTIVATE, onFileStream);
        fileStream.addEventListener(IOErrorEvent.IO_ERROR, onFileStream);
        fileStream.addEventListener(Event.COMPLETE, onFileStream);



    }

    protected function onFileStream(event:Event):void
    {
        trace('filestream event was ' + event)
        fileStream.close();


    }   
4

3 回答 3

3

我似乎已经解决了这个问题:

    private function saveFile(event:MouseEvent):void
    {  
        var xml:XML = _canvas.getObjectData(FormatType.DEGRAFA);
        trace('xml is ' + xml.toXMLString())
        var file:File = File.documentsDirectory.resolvePath("annotations.xml");         
        var fileStream:FileStream = new FileStream();  

        fileStream.openAsync(file, FileMode.WRITE);  
        fileStream.writeUTFBytes(xml.toXMLString()); 
        fileStream.addEventListener(Event.CLOSE, fileClosed);  
        fileStream.close();  

        function fileClosed(event:Event):void { 

            trace("File Saved");  

        }        
    }  
于 2013-04-05T22:42:08.787 回答
0

您在添加侦听器之前编写。正确的顺序应该是:

    var fileStream:FileStream = new FileStream();

// 这里所有的监听器

    fileStream.open(file, FileMode.WRITE);
    fileStream.writeUTF(xml.toString());
于 2013-08-14T09:20:36.063 回答
0

您必须记下用于打开文件流的命令。如果您使用 filestream.openAsync,则文件流将异步打开,这意味着您必须等待 filestream 对象上的 Event.OPEN 事件。如果您使用 filestream.open,那么您可以立即调用 filestream 对象上的函数,而无需等待 OPEN 事件。对我来说,跳转到 ActionScript 及其异步特性需要一些时间来适应。

于 2014-11-16T17:32:28.417 回答