2014-09-04 91 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