使用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”,但行为相同!
如何解决这个问题?
答案 0 :(得分:0)
我找到了解决方案:
jsIQ.msg使用FileWriter将数据放入日志
所以,当我“得到一个文件”时,我发信息给它记录 - 这会打破“readed file”的链接,并且它已经过时了。
因此,永远不要使用组合:
此行为的原因未知......