2014-05-28 3 views
0

В настоящее время я работаю с файловым плагином Cordova (Cordova version 3.4.1), и у меня возникают проблемы с его работой на Android. Я просмотрел документацию на плагине и в API хранения файлов HTML5 (а также несколько сообщений StackOverflow - большинство из них советуют сначала установить плагин, что я уже сделал), и я не могу найти ничего, что связано с вопрос, который у меня есть.Кордонский файловый плагин не записывается в файл

Я создаю приложение (Android на данный момент, iOS позже), которое получает push-уведомления. Уведомления работают нормально, но я хочу добавить возможность пользователям отключать эти push-уведомления. Я хотел бы хранить эти данные в телефоне где-то, и поскольку еще нет плагина для использования SharedPreferences, я пишу настройки уведомлений пользователя в файл на телефоне. (Я не хочу запрашивать наш сервер, чтобы узнать настройки уведомлений.)

Итак, я создал вещи, основанные на этом учебнике: http://selinosblog.com/2014/01/27/saving-and-deleting-images-via-phonegaps-file-api/ вместе с документами Cordova. Вот код, я использую для взаимодействия с файловой системой:

var FileIO = { 
    initializeFileSystem: function() { 
     window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, FileIO.gotFS, FileIO.errorHandler); 
    }, 

    gotFS : function(fileSystem) { 
     console.log("FILE SYSTEM IS ", fileSystem.name); 

     gFileSystem = fileSystem; 
     FileIO.getFile({create : true}, FileIO.writeFile); 
    }, 

    getFile : function(params, success) { 
     gFileSystem.root.getFile('notification_preferences.txt', params, success, FileIO.errorHandler); 
    }, 

    writeFile : function(fileEntry) { 
     console.log(fileEntry); 
     console.log('FILE URL: ' + fileEntry.toUrl()); 
     fileEntry.createWriter(function(fileWriter) { 
      var blob = new Blob(['Lorem Ipsum'], {type: 'text/plain'}); 
      fileWriter.write(blob); 
     }, errorCallback); 
    }, 

    readFile : function (fileEntry) { 
     fileEntry.file(function (file) { 
      var reader = new FileReader(); 
      reader.onloadend = function (e) { 
       console.log('CONTENTS OF FILE: ', e.target.result) 
      }; 
      reader.readAsText(file, 'text/plain'); 
     }, errorCallback); 
    }, 

    removeFile : function(fileEntry){ 
     fileEntry.remove(); 
    }, 

// simple error handler 
    errorHandler : function(e) { 
     var msg = ''; 
     switch (e.code) { 
      case FileError.QUOTA_EXCEEDED_ERR: 
       msg = 'QUOTA_EXCEEDED_ERR'; 
       break; 
      case FileError.NOT_FOUND_ERR: 
       msg = 'NOT_FOUND_ERR'; 
       break; 
      case FileError.SECURITY_ERR: 
       msg = 'SECURITY_ERR'; 
       break; 
      case FileError.INVALID_MODIFICATION_ERR: 
       msg = 'INVALID_MODIFICATION_ERR'; 
       break; 
      case FileError.INVALID_STATE_ERR: 
       msg = 'INVALID_STATE_ERR'; 
       break; 
      default: 
       msg = e.code; 
       break; 
     } 
     console.log('Error: ' + msg); 
    } 
}; 

Теперь, это ошибка, я получаю, когда я пытаюсь записать в файл:

D/CordovaLog(2871): file:///android_asset/www/cordova.js: Line 1034 : processMessage failed: 
Message: S01 File30696438 {"fullPath":"\/\/notification_preferences.txt","filesystemName":"temporary", 
"isDirectory":false,"nativeURL":"file:\/\/\/data\/data\/org.changefactor.pgdemo\/cache\/notification_preferences.txt", 
"filesystem":0,"isFile":true,"name":"notification_preferences.txt"} 

Я не могу понять что происходит или что я делаю неправильно. Есть ли более простой способ хранить эти данные? Что-то не так с конфигурацией?

+0

Какой код вы используете, чтобы написать файл? можете ли вы включить это также? – Chausser

ответ

0

localStorage имеет больше смысла в отношении сохранения пользовательских настроек. То есть, если вы не собираетесь генерировать лот пользовательских настроек (например,> 5 МБ).

Смежные вопросы