这是我第一次真正开始使用Air for Android,如果已经涵盖了这个问题,请原谅我。如果有,那我就找不到了。
所以我有一个加载和显示xml数据的应用程序。 在应用程序中,我有代码检查wiFi或等效物是否可用,如果是,则拉实时xml文件,如果没有,则拉出随应用程序打包的本地xml文件。 如果我从实时网址中提取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();
}
有什么我错过的吗?
更新时间:2012年8月21日 不知道这是怎么回事。这是我现在必须使用的代码,以加载本地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);
}
}
}
}
}
}