2

Phonegap 関数を使用して iOS アプリ (phonegap 2.1 + jquerymobile) でファイルを読み取ろうとしましたが、getFile常に次のエラーが発生します。

Error in error callback: File3 = TypeError: 'undefined' is not an object

私のファイルは入っwww/data/datajson.txtていて、いくつかのjsonデータが含まれています。

私のコード:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
    //get www folder path
    var path = window.location.pathname;
    path = path.substr( path, path.length - 10 );
    var pathwww = path;
    console.log(pathwww); /* /var/mobile/Applications/{ID}/{APPNAME}.app/www/ */
    fileSystem.root.getFile("file//"+pathwww+"data/datajson.txt", null, gotFileEntry, fail);
    // result : Error in error callback: File3 = TypeError: 'undefined' is not an object
    pathwww.getFile("file///data/datajson.txt", null, gotFileEntry, fail);
    // result : Error in success callback: File2 = TypeError: 'undefined' is not a function
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);
    readAsText(file);
}

function readDataUrl(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);
    };
    reader.readAsDataURL(file);
}

function readAsText(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as text");
        console.log(evt.target.result);
    };
    reader.readAsText(file);
}

function fail(evt) {
    console.log(evt.target.error.code);
}

フォルダー内を移動してファイルwwwを読み取れない理由がわかりません。datajson.txt

助けてくれてありがとう。

4

2 に答える 2

2

アプリからテキスト ファイルを取得する場合は、「ajax」呼び出しを行うだけで取得できます

        $.ajax({
        url : 'data/datajson.txt',
        type : "get",
        dataType : "json",
        success : function(data, textStatus, jqXHR) {
            console.log('data loaded ' + JSON.stringify(data));
        },
        error : function(jqXHR, textStatus, errorThrown) {
            console.log('error loading data :' + errorThrown);
        }
    });

編集

ファイルを書きたい場合、アプリと同じ場所に書き込むことはできません。それらをアプリの Document フォルダーに書き込む必要があります。これはインストール時に作成されるため、XCode でそこにファイルを配置することはできません。インストール後にそこにファイルをコピーする必要があります。

呼び出すと、アプリのドキュメント フォルダーにアクセスできます。window.requestFileSystem

于 2012-09-26T11:22:15.180 に答える
1

HTML ファイルがフォルダーwwwにあると仮定すると、次のことを試すことができます。

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
    fileSystem.root.getDirectory("data", {create: true}).getFile("datajson.txt", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
}

function gotFile(file){
    readDataUrl(file);
    readAsText(file);
}

function readDataUrl(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as data URL");
        console.log(evt.target.result);
    };
    reader.readAsDataURL(file);
}

function readAsText(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("Read as text");
        console.log(evt.target.result);
    };
    reader.readAsText(file);
}

function fail(evt) {
    console.log(evt.target.error.code);
}

試してみて、これがうまくいくかどうか教えてください。

于 2012-09-26T10:20:16.763 に答える