1

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);
                }
            }
        }
    }
}

}

4

0 に答える 0