0

phonegap 2.9.0 を使用し、このコールバックを使用してファイルを読み取ります。

    fBrowse.params.on_file_select = function(file){     // file: FileEntry  
        try{
            var reader = new FileReader();
            jsIQ.msg('loading game!..');
            reader.onload = function(evt) {
                // success
                var game = null;
                // remove garbage from string
            jsIQ.msg('loading game!3..' + arguments.length);
            jsIQ.msg('loading game!3/2: ' + evt.target.result);
            //jsIQ.msg('data: ' + evt.target.result, 2);
                var s = $.trim(B64.decode(evt.target.result));
            jsIQ.msg('loading game!4..');
                s = s.substr(0, s.indexOf('}')+ 1);
            jsIQ.msg('loading game!5..');
                game = JSON.parse( s );
                if (game != null) {
                    // success!
                    $('#fBrowse').hide();
                    jsIQ.msg('Load game success', 2);
                    jsIQ.triggerEvent('heart_game_loaded', {data: game});
                }
            };
            reader.onerror = function(){
                alert('error reading file');
            };
            jsIQ.msg('loading game!2..');
            file.file(function(f){
                reader.readAsText(f);
            }, function(){
                alert('Error opening file');
            });
        } catch (e){
            jsIQ.msg('loadgame err: ' + e.message, 2);
            alert('Внутренняя ошибка');
        }
        //return true;
    };

そして、このログファイルの内容が表示されます:

...

[-] 17:1:26.257 ゲーム ファイルの読み込み: /mnt/sdcard/heartofice/heartofice2.savegame

[-] 17:1:26.260 ゲームをロード中!..

[-] 17:1:26.262 ゲームをロード中!2..

[-] 17:1:26.270 ゲームをロード中!3..1

これは、次の行を意味します

evt.target.result

予告なしにエラーで落ちています!サクセスリードコールバックに「evt」が渡されたのですが、使えませんか??

これは、実際の Android デバイス (4.0.3) で発生します。

onload コールバックから「reader.result」を使用しようとしましたが、同じ動作になりました!

これを解決するには?

4

1 に答える 1

0

私は解決策を見つけました:

jsIQ.msg は FileWriter を使用してデータをログに記録します

そのため、「ファイルを取得した」ときに、ログに記録するようにメッセージを送信しました。これにより、「読み取ったファイル」へのリンクが壊れ、古くなります。

そのため、組み合わせを使用しないでください。

  1. 読み取り用のファイル #1 を取得
  2. 書き込み用のファイル #2 を取得し、書き込みます
  3. ファイル#1を読む

この行動の理由は不明です...

于 2013-09-16T08:51:21.193 に答える