我最近在尝试保存图片时遇到了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分辨率,一切似乎都能正常工作。只是对于未来绊倒这个冷清问题的人:)
答案 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
依赖项。