1

这是我第一次真正接触到 Air for Android,所以如果这个问题已经被覆盖,请原谅我。如果有,那么我一直找不到它。

所以我有一个加载和显示 xml 数据的应用程序。在应用程序中,我有代码来检查 wifi 或等效设备是否可用,如果可用,则提取实时 xml 文件,如果没有,则提取与应用程序打包的本地 xml 文件。如果我从实时 url 中提取 xml,则该应用程序可以正常工作,但如果从本地提取则不能。

在做了一些研究之后,我发现当拉入本地文件时,Air for Android 的工作方式略有不同。所以我需要解析应用程序目录。我这样做了,但仍然没有快乐。

经过更多研究后,我读到一些帖子说我应该使用 fileStream()

在 Flash IDE 中进行测试时,它始终按预期工作。

如果我还有更多的头发,我会马上拔掉它!本地xml文件在“includes”中设置

下面我用于测试的示例代码

var subURL:String = "xml_feeds/myxmlfile.xml"
var fileStream:FileStream = new FileStream();
var file:File = File.applicationDirectory.resolvePath(subURL);
fileStream.addEventListener(Event.COMPLETE, processXMLData);
fileStream.openAsync(file, FileMode.READ);
MovieClip(parent).txStates.text = file.url+" - TRYING"
var prefsXML:XML = new XML()
function processXMLData(event:Event):void{
    MovieClip(parent).txStates.text = file.url+" - OPEN"
    prefsXML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
    var tempArr:Array = new Array();
    var reportCount:Number = prefsXML.row.column.length()
    for (var i = 0; i < reportCount; i++) {
        var rName:String = prefsXML.row.column[i].@name.toString();
        var rValue:String = prefsXML.row.column[i].toString();
        var rTitle:String = prefsXML.row.column[i].@name.toString()
        tempArr.push([rName, rValue, rTitle]);
    }
    showData()
    fileStream.close();
}

有什么我错过的吗?

更新:21/08/12 不知道这是怎么回事。这是我现在必须使用的代码才能加载到本地 xml 文件中。似乎有点啰嗦

function listing():void{
var folders:Array = new Array();
folders = File.applicationDirectory.getDirectoryListing();
for(var i:Number =0;i<folders.length;i++){
    if(folders[i].isDirectory){ 
        if(folders[i].name=="xml_feeds"){
            var files:Array = new Array();
            files = folders[i].getDirectoryListing();
            for(var j:Number=0;j<files.length;j++){
                if(files[j].name=="CTSection2.xml"){
                    fileStream.openAsync(files[j], FileMode.READ);
                    fileStream.addEventListener(Event.COMPLETE, processXMLData);
                    fileStream.addEventListener(IOErrorEvent.IO_ERROR, localXMLFailLoad);
                }
            }
        }
    }
}

}

4

0 回答 0