Android - NullPointerException onPictureTaken

时间:2013-12-02 20:56:12

标签: android camera nullpointerexception

我有一个使用自定义相机的应用。我已经在很多设备上尝试过它而没有问题,但我最近收到了运行Android 2.3.5的摩托罗拉DROID X2的崩溃报告。

LOG:

Fatal Exception java.lang.NullPointerException
FileOutputStream.java line 256 java.io.FileOutputStream.write
CameraUtils.java line 29 MY_PACKAGE.camera.CameraUtils.ByteArrayToFile
CameraActivity.java line 297 MY_PACKAGE.camera.CameraActivity$1.onPictureTaken
Camera.java line 542 android.hardware.Camera$EventHandler.handleMessage

CameraActivity - OnPictureTaken:

private final PictureCallback mPicture = new PictureCallback() {

    public final void onPictureTaken(byte[] data, Camera camera) {

        if (checkSDCard()) {

            imageFile = getImageFile();
            Log.i(TAG, imageFile.toString());

            imageFile = CameraUtils.ByteArrayToFile(data, imageFile);

            if (mCameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
                flipImage(data, imageFile);
            } else { }

            try {
                exif = new ExifInterface(imageFile.getAbsolutePath());
                exif.setAttribute(ExifInterface.TAG_ORIENTATION, Integer.toString(orientation));
                exif.saveAttributes();
            } catch (IOException e) {
                e.printStackTrace();
            }

            performCrop();

        } else {
            Toast.makeText(CameraActivity.this, SD_ERROR, Toast.LENGTH_SHORT).show();
        }

    }

};

CameraUtils - ByteArrayToFile:

26. public final static File ByteArrayToFile(byte[] data, File file) {
27. try {
28.     FileOutputStream stream = new FileOutputStream(file);
29.     stream.write(data);
30.     stream.close();
31. } catch (FileNotFoundException e) {
32.     Log.d("DG_DEBUG", "File not found: " + e.getMessage());
33. } catch (IOException e) {
34.     Log.d("DG_DEBUG", "Error accessing file: " + e.getMessage());
35. }
36. return file;
37. }

由于FileNotFoundException或IOException没有捕获到错误,我假设byte []数据导致NullPointerException,而不是文件本身。

我无法在我的任何个人设备上重现该问题,也无法在网上找到有关该设备或操作系统的任何内容,因此我想知道这是否是一个已知问题,如果有更好的实施(例如找到解决方案:NullpointerException onPictureTaken),或者我应该将最低SDK设置得更高。谢谢!

1 个答案:

答案 0 :(得分:0)

我相信每张图片都应以

开头
if (data != null) 

data null 可能有很多原因,您的代码应为be prepared

我认为这不是ver的缺陷。 2.3.5,但您可以将DROID X2放入黑名单。