【问题标题】:Unknown error with phonegap file readerphonegap 文件阅读器的未知错误
【发布时间】:2013-09-11 13:27:17
【问题描述】:

使用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”,但行为相同!

如何解决?

【问题讨论】:

  • 我尝试使用 onloadend 事件 - 结果相同...
  • 您在 logcat 中是否遇到任何错误? logcat 也会显示任何 JavaScript 控制台错误。您可以尝试执行console.log(JSON.stringify(evt)) 之类的操作,以查看evt 对象是否符合您的预期。
  • jsIQ.msg 执行与 console.log 相同的日志,但在外部文件中。但是任何类型的使用“evt”都会破坏这个函数:typeof(evt), if (!evt)。

标签: javascript android cordova filereader


【解决方案1】:

我找到了解决办法:

jsIQ.msg 使用 FileWriter 将数据写入日志

所以,当我“得到一个文件”时,我向它发送消息以记录 - 这会破坏指向“已读取文件”的链接,并且它变得过时了。

因此,永远不要使用组合:

  1. 获取文件#1 以供读取
  2. 获取文件#2 进行写入,写入
  3. 读取文件#1

这种行为的原因未知...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多