这是我第一次真正接触到 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);
}
}
}
}
}
}