我有一个使用自定义相机的应用。我已经在很多设备上尝试过它而没有问题,但我最近收到了运行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设置得更高。谢谢!
答案 0 :(得分:0)
我相信每张图片都应以
开头if (data != null)
data
null 可能有很多原因,您的代码应为be prepared。
我认为这不是ver的缺陷。 2.3.5,但您可以将DROID X2放入黑名单。