【问题标题】:Cordova file plugin not writing to fileCordova 文件插件不写入文件
【发布时间】:2014-05-28 22:18:27
【问题描述】:

我目前正在使用 Cordova(Cordova 版本 3.4.1)文件插件,但在让它在 Android 上运行时遇到了一些麻烦。我已经阅读了关于插件和 HTML5 文件存储 API 的文档(以及一些 StackOverflow 帖子 - 他们中的大多数建议先安装插件,我已经这样做了),我找不到任何与我遇到的问题。

我正在构建一个接收推送通知的应用程序(现在是 Android,以后是 iOS)。通知工作正常,但我想为用户添加禁用这些推送通知的功能。我想将此数据存储在手机中的某个地方,并且由于还没有使用 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"}

我不知道发生了什么或我做错了什么。有没有更简单的方法来存储这些数据?是不是配置有问题?

【问题讨论】:

  • 你用什么代码来写文件?你能把它也包括进去吗?

标签: javascript android cordova


【解决方案1】:

localStorage 在存储用户首选项方面更有意义。也就是说,除非您打算生成 很多 个用户偏好(例如 > 5MB)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2016-04-19
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多