phonegap拍照然后将照片移至文件系统指定位置


我想做的事情是:
1.通过phonegap的camera api拍摄照片
2.将拍得的照片移动至文件系统的指定位置
3.将该照片的路径保存进模型对象
4.同步模型对象的数据和本地永久性存储

代码如下:


 photo.getPicture = function () {
    navigator.camera.getPicture(function (imageURI) {
        // move the picture to the images dir
        console.log(imageURI);
        window.resolveLocalFileSystemURI(imageURI, function (fileEntry) {
            fileEntry.moveTo(file.appDir, fileEntry.name, function (newFileEntry) {
                console.log(newFileEntry.fullPath);
                var moments = viewModel.moments;

                viewModel.set('moment.Src', newFileEntry.fullPath);
                moments.add(viewModel.moment);
                moments.sync();
                console.log(viewModel.moments._total);
            }, function (error) {
                console.log('error occured while moving image: ' + error);
            });
        }, function (e) {
            console.log('error occured while resolving file uri : ' + e.target.error.code);
        });
    }, function (error) {
        alert('error occured while capturing: ' + error);
    }, {
        quality: 100,
        destinationType: Camera.DestinationType.FILE_URI,
        sourceType: Camera.PictureSourceType.CAMERA,
        encodingType: Camera.EncodingType.JPEG
    });
};

现在的问题是:
1.照片可以成功地被添加至模型对象,但是再次打开app,它却消失了。也就是说没有同步进本地永久存储
2.连续拍照,只会重复添加第一次拍得的照片。当然再次打开app它们都没了。
3.日志如下:

file://localhost/var/mobile/Applications/77658234-7D3E-4663-8284-5E9F35167D16/tmp/cdv photo 016.jpg
---
/var/mobile/Applications/77658234-7D3E-4663-8284-5E9F35167D16/Documents/moment/cdv photo 016.jpg
---
2
---
unhandled exception in event handler. exception suppressed
---
%o TypeError: 'null' is not an object

前三个输出都是代码中正常的调试输出,可见程序顺利地执行到了

console.log(viewModel.moments._total)

并且输出的值也是正确的。
可之后的两条异常报错,我就不太明白了。由于我的调试环境是XCode控制台,也无法定位到是哪个个js文件的哪条语句引发地报错了。
我的数据框架是 jaydata

先谢谢大家。

值得一提的是,我的测试设备是iPod Touch 4,内存只有256Mb。

phonegap jaydata ios JavaScript

actfate 11 years ago

问题已经解决。

因为我在jaydata初始化时的数据结构中定义了一个字段为required,而我在添加照片的时候没有给这个字段赋值,导致了这个错误。

lagg44 answered 11 years ago

Your Answer