科尔多瓦:写在一个文件中

时间:2016-01-02 19:38:05

标签: json cordova

尽管我在众多论坛上搜索,但有一段时间我已经陷入困境。如果我的英语不完美,我很抱歉,我希望我能够清楚地了解我并帮助我解决这个问题。

我正在尝试使用Cordova学习一些移动开发。 我想创建一个类似Instagram的应用程序,其中将存储存储器。该应用程序使用两个页面: - 显示所有存储的存储器的页面; - 添加内存的页面。内存存储在本地json文件中。

这是我的代码(暂时): 注意:代码已被翻译以便更好地理解。我希望我没有做出任何翻译错误,与手头的主题无关

addMemory.html(查看以添加内存)

<form role="form" class="col-xs-12">
    <div class="form-group">
        <label for="title">Title :</label>
        <input type="text" id="title" class="form-control" ng-model="souvenir.title" placeholder="Add a memory title" />
    </div>
    <div class="form-group">
        <label for="image">Image :</label>
        <button id="image" class="form-control btn btn-default">Add...</button>
    </div>
    <button class="btn btn-default" ng-click="createMemory()">Create</button>
</form>

addMemoryController.js (添加内存。目前,内存是存储在本地文件中的静态json。稍后会添加动态控件)

app.controller("addMemoryController", function ($scope, $location) {
  //Array of all stored memories
  $scope.memoriesList = [];

  //New memory to add (for now static)
  $scope.memory = {
      image: "image/moutain.png",
      title:""
  }

  //The function pushes the new memory into the list then save the array
  $scope.createMemory = function () {
      $scope.memoriesList.push($scope.memory);
      $scope.saveArray();
  }

  //The function save the array into the local file
  $scope.saveArray = function () {
      window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
      var requestedBytes = 1024*1024*10; // 10MB
      navigator.webkitPersistentStorage.requestQuota (
          requestedBytes,
          function (grantedBytes) {
              window.requestFileSystem(PERSISTENT, grantedBytes, $scope.fileSystemReceived, $scope.errorHandler('requestFileSystem'));
          },
          $scope.errorHandler
      );
      $location.path("/");
  }

  //Function called when the fileSystem is received
  $scope.fileSystemReceived = function (fileSystem) {
      fileSystem.root.getFile("memories.json", { create: true, exclusive: false }, $scope.fileEntryReceived, $scope.errorHandler('getFile'));
  }

  //Function called when the fileEntry is received
  $scope.fileEntryReceived = function (fileEntry) {
      fileEntry.createWriter($scope.fileWriterReceived, $scope.errorHandler('createWriter'));
  }

  //Function called when the fileWriter is received
  $scope.fileWriterReceived = function (fileWriter) {
      fileWriter.onwrite = function (evt) {
          console.log("write success");
      };
      var memoriesListText = angular.toJson($scope.memoriesList);
      fileWriter.write(memoriesListText);

  }

  //Error managment
  $scope.errorHandler = function (errorMessage) {
      return function () { console.log(errorMessage); };
  }
});

当我启动我的应用程序时,我的“写入”功能出错: TypeMismatchError:对象的类型与对象关联的参数的预期类型不兼容。

我尝试写一个简单的文本内容,没有任何区别:

fileWriter.write("some text");

我甚至尝试创建一个“.txt”文件,逻辑上没有任何区别。

如果不是文字,我应该作为参数给出什么?我无法提交描述此函数类型签名的文档。

1 个答案:

答案 0 :(得分:2)

文件写作者需要一个对象,所以称之为:

var blob = new Blob(["some text"], {type: "text/plain"});
fileWriter.write(blob);

更多信息: https://www.npmjs.com/package/cordova-plugin-file http://www.html5rocks.com/en/tutorials/file/filesystem/

如果您正在搜索关于cordova的信息,请从cordova开始:http://cordova.apache.org阅读文档和博客。互联网上有很多过时的信息。