【问题标题】:Problems using phonegap / cordova file plugin part 1使用 phonegap/cordova 文件插件的问题第 1 部分
【发布时间】:2014-09-05 02:01:40
【问题描述】:

我想为我的 cordova 应用添加一些简单的日志记录功能。

于是我添加了文件插件,实现了一个超级简单的日志方法并进行了测试。

我的配置:

    $ cordova --version
    3.5.0-0.2.7

    $ cordova plugins
    org.apache.cordova.file 1.3.0 "File"

测试设备是华为u8850,运行Android 2.3.5

记录者:

window.MyLog = {
    log: function(line){
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(FS) {
            FS.root.getFile('the_log1.txt', {"create":true, "exclusive":false},
                function(fileEntry) {
                    fileEntry.createWriter(
                        function(writer) {
                            console.log(line);
                            writer.seek(writer.length);     // append to eof
                            writer.write(line + '\n');      // write the line
                        }, fail);
                }, fail);
        }, fail);
    }
};

测试:

    MyLog.log(new Date().toLocaleTimeString());

一切似乎都很好:

  • 文件已创建,行已插入
  • 再次启动应用程序时,该行被附加

然后: 我试着写一些额外的字符:

window.MyLog = {
    log: function(line){
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(FS) {
            FS.root.getFile('the_log2.txt', {"create":true, "exclusive":false},
                function(fileEntry) {
                    fileEntry.createWriter(
                        function(writer) {
                            console.log(line);
                            writer.seek(writer.length);     // append to eof
                            writer.write(line + '\n');      // write the line
                            writer.write('----' + '\n');    // extra write
                        }, fail);
                }, fail);
        }, fail);
    }
};

我发现了这个日志猫输出:

    16:00:00
    processMessage failed: Error: [object Object]
    processMessage failed: Stack: undefined
    processMessage failed: Message: S01 File218896726 {"lastModifiedDate":1409839200000,"fullPath":"\/the_log2.txt","type":"text\/plain","name":"the_log2.txt","size":0}

-> 貌似不能多次使用 writer.write 命令

问:

【问题讨论】:

  • 您是否尝试过实现onwriteend() 事件回调?

标签: file cordova phonegap-plugins cordova-3


【解决方案1】:

我认为您必须在将任何内容写入文件后实现并等待onwriteend() 事件触发。

onwriteend() 触发后,您可以再次写入文件。

我在创建日志记录功能时所做的事情是这样的(您可以将其用作指南,我只是在脑海中输入它):

function fileItemSuccessWrite(writer){
    writer.seek(writer.length);

    writer.onwriteend = function(e) {
         // TODO WRITE AGAIN
    };

    writer.onerror = function(e) {
         // HANDLE ERROR
    };

    writer.write(YOUR_LOG_TO_WRITE);

}
fileEntry.createWriter(fileItemSuccessWrite, fileItemFailWrite);

我还创建了一个cachetmp_variable),用于我想在日志文件中写入的内容。一旦这个tmp_variable 达到特定大小,我就将它转储到日志文件中。所以fileSystem 访问更轻松。

您可以在W3.org 上阅读有关writerwrite 的信息

【讨论】:

  • 我明白了。我真的不得不阅读文档。使用 onwriteend 方法是关键。但由于该文件是一个日志,我必须确保快速附加行——在这种情况下,缓存不是一个选项。我目前正在编写一个具有一些基本功能的小型文本文件包装器,因此应用程序可以轻松附加行,而无需处理文件接口的异步实现。我将上传该代码作为我第二个问题的答案:stackoverflow.com/questions/25668876/…
猜你喜欢
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多