2014-09-04 52 views
1

我想为我的cordova应用程序添加一些简单的日志记录功能。使用phonegap/cordova文件插件第1部分的问题

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

我的配置:

$ 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); 
    } 
}; 

我发现这个log cat输出:

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命令不止一次

问:

+0

你尝试执行'onwriteend()'事件回调writerwrite? – benka 2014-09-05 10:06:58

回答

0

我认为你必须执行,并等待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); 

而且我有什么对于我想写入日志文件的内容,创建了一个cache(a tmp_variable)。一旦这个tmp_variable达到了特定的大小,我将它转储到日志文件中。所以它在访问fileSystem时更轻。

你可以阅读有关W3.org

+0

我明白了。我真的必须阅读文档。关键是使用onwriteend方法。但由于该文件是一个日志,我必须确保快速追加行 - 在该上下文中缓存不是一个选项。我目前正在编写一个带有一些基本功能的小文本文件包装器,因此应用程序可以轻松追加行,而无需处理文件接口的异步实现。我将上传该代码作为我的第二个问题的答案:http://stackoverflow.com/questions/25668876/problems-using-phonegap-cordova-file-plugin-part-2-synchronicity – Gisela 2014-09-05 10:44:42