Android 用の Air を実際に使用するのはこれが初めてなので、この問題が既にカバーされている場合はご容赦ください。もしそうなら、私はそれを見つけることができませんでした。
そのため、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);
}
}
}
}
}
}