将图像另存为Base64时,应用程序在Ionic视图中崩溃

时间:2015-11-05 12:59:15

标签: javascript cordova ionic

我最近在尝试保存图片时遇到了Ionic应用程序的问题。

我正在使用ngcordova插件捕获图像,并将其作为base64字符串保存在我的作用域中。

我选择使用本地存储来存储我们的图片,因为它们将是高质量的图像,这些图像不是很重要。

拍照的方法

    $scope.takePictureFront = function(){
  var cameraOptions = {
    quality: 10,
    destinationType: Camera.DestinationType.DATA_URL
  };
  var success = function(data){
    $scope.$apply(function () {
      /*
       remember to set the image ng-src in $apply,
       i tried to set it from outside and it doesn't work.
       */
      $scope.cameraPicFront = "data:image/jpeg;base64," + data;
      alert('Inserting front ');

    });
  };
  var failure = function(message){
    alert('Failed because: ' + message);
  };
  //call the cordova camera plugin to open the device's camera
  navigator.camera.getPicture( success , failure , cameraOptions );
};

要保存到localstorage的对象

  var newCustomer = {
    firstname: $scope.customer.firstname(),
    lastname: $scope.customer.lastname(),
    title: $scope.customer.title(),
    phone: $scope.customer.phone(),
    cellphone: $scope.customer.cellphone(),
    email: $scope.customer.email(),
    timeStamp: today,
    metAt: $scope.conferencePicked,
    addedBy : $scope.userLoggedIn,
    imageFront : $scope.cameraPicFront,
    imageBack : $scope.cameraPicBack,
    comment: $scope.customer.comment(),
    interests : $scope.selected

};

如何将对象数组保存到localstorage

$scope.storedJSON = JSON.parse(window.localStorage['data'] || '{"companies":[],"customers":[]}');
        $scope.storedJSON.customers.push(newCustomer);
        $scope.storedJSON.companies.push(newCompany);
        var jsonData = JSON.stringify($scope.storedJSON);
        window.localStorage['data'] = jsonData;
        $state.go('tab.search');

当我尝试在ipad,平板电脑和Android设备上插入日期时,应用程序闲置,然后崩溃或抓住回复。

有什么建议吗?

修改

我找到了解决方法。即使是我试过的优秀手机和平板电脑也存在问题,不可理解的是,在本地存储中保存了这样的文件。

我编辑了相机插件的选项,现在正在保存一个较小的图像,具有较低的taget分辨率,一切似乎都能正常工作。只是对于未来绊倒这个冷清问题的人:)

1 个答案:

答案 0 :(得分:1)

应用程序中可能存在内存泄漏。由于我不知道您的应用程序如何运作,这将是我最好的猜测。您可以尝试的另一件事是检查是否允许LocalStorage;当您尝试使用LocalStorage(个人体验)时,存在许多内存违规。

我建议你做的是将base64保存到文本文件中;这不会妨碍您的应用程序的性能,因为读/写操作实际上是内存轻。 :)

看看:

$scope.saveFileToDataStorate = function() {

    var data = JSON.stringify( newCustomer );

    $cordovaFile.writeFile( cordova.file.dataDirectory, 'userDetails.txt', data )
        .then( function( suc ){

            alert( 'File Saved! You can now try and open it.' );

        }, function( error ){ alert( error.code ); });

};

请记住在Controller中包含$cordovaFile依赖项。