1

モバイル アプリを作成していますが、blackberry フォンで問題が発生しました (ほとんどのユーザーは blackberry を使用しています)。phonegap api を使用しています。

問題は、電話のブラウザの localstorage に保存している文字列をダウンロードしていて、文字列が x 百万文字を超えると、localstorage が文字列を保存できなくなることです。localstorage が提供するスペースの少なくとも 10 倍のスペースが必要です。

代わりに文字列をテキストファイルとして保存しようとしましたが、phonegap が提供するドキュメントに従いましたが、ファイルの読み取りまたは書き込みを管理できなかったため、あきらめました (これが私がこれを行う唯一の方法だと思います)。文字列の圧縮も検討しましたが、前に言ったように、10倍以上のスペースが必要で、10文字の文字列を1文字の文字列に変換する方法がわかりません。

ファイル リーダーおよびライターのコード (問題は、ファイルが見つからないか作成されないことです。getfile() は読み取りまたは書き込みに失敗し、エラー コード 1 - file_not_found を返します):

function OnLoadSignInCheck(){

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

}

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

function gotFS(fileSystem) {
alert("3");
    fileSystem.root.getFile("readme.txt", {create: true, exclusive: false}, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
alert("4");
    fileEntry.createWriter(gotFileWriter, fail);
}

function gotFileWriter(writer) {
alert("5");
    writer.onwriteend = function(evt) {
        alert("contents of file now 'some sample text'");
        writer.truncate(11);  
        writer.onwriteend = function(evt) {
            alert("contents of file now 'some sample'");
            writer.seek(4);
            writer.write(" different text");
            writer.onwriteend = function(evt){
                alert("contents of file now 'some different text'");
            }
        };
    };
    writer.write("some sample text");
    reader();
}

function fail(error) {
    alert(error.code);
}

function reader() {
alert("1");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFSr, fail);
}

function gotFSr(fileSystem) {
    alert("2");
    fileSystem.root.getFile("readme.txt", null, gotFileEntryr, fails);
}

function gotFileEntryr(fileEntry) {
    alert("3");
    fileEntry.file(gotFiler, fails);
}

function gotFiler(file){
    alert("4");
    readDataUrl(file);
    readAsText(file);
}

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

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

function fails(evt) {
    alert(evt.target.error.code);
}
4

1 に答える 1

0

解決済み ファイル パスは「file:///store/home/user/documents/readme.txt」の形式である必要があります。ただし、これは次の質問につながります-ユーザーごとに、または少なくともbb、iphone、androidユーザーごとに異なるため、ユーザーにファイルパスを選択させるにはどうすればよいですか?

于 2013-06-12T12:10:33.877 に答える