【发布时间】:2013-12-04 06:44:59
【问题描述】:
我有一个使用自定义相机的应用。我已经在许多设备上尝试过,但没有出现问题,但最近我收到了来自运行 Android 2.3.5 的摩托罗拉 DROID X2 的崩溃报告。
日志:
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 设置得更高。谢谢!
【问题讨论】:
标签: android camera nullpointerexception