从Bitmap获取Uri返回null

时间:2015-05-08 07:40:51

标签: android bitmap

我从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

2 个答案:

答案 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路径并且代码爆炸的原因。

您无法保证保存图像始终成功(例如闪存可能已满),因此您必须修改代码才能从此错误情况中恢复,例如:通过告诉用户他们的图像无法保存。