我从Bitmap获取Uri时遇到运行时异常。 BTW相同的代码在独立项目中非常完美。
调用相机意图
private void openCamera() {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent,
REQUEST_CODE_CAPTURE_IMAGE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_CAPTURE_IMAGE && resultCode == getActivity().RESULT_OK
&& null != data) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
String s = getImageUri(photo).toString();
Globals.saveImagePathToSharedPref(getActivity(), s);
setImage(Uri.parse(s));
}
}
public Uri getImageUri(Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
在getImageUri方法中,路径返回null,异常如下:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null,
request=327780, result=-1, data=Intent { act=inline-data (has extras) }}
to activity : java.lang.NullPointerException: uriString
答案 0 :(得分:1)
您可以使用MediaStore.EXTRA_OUTPUT
作为cameraIntent
的额外内容,然后将完整尺寸的图片保存到该位置。意图活动结果中返回的位图只是一个缩略图。
你可以使用
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
生成Uri
以传递EXTRA_OUTPUT
答案 1 :(得分:0)
您的getImageUri()
方法命名不佳,因为它不仅仅是获取Uri,它还首先将图像保存到存储中(这可能是更重要的操作)。
查看docs for MediaStore.Images.Media.insertImage(…)
:
<强>返回强>
新创建图像的URL,如果图像因任何原因未能存储,则为null。
这样(很可能)是您获得null
路径并且代码爆炸的原因。
您无法保证保存图像始终成功(例如闪存可能已满),因此您必须修改代码才能从此错误情况中恢复,例如:通过告诉用户他们的图像无法保存。