我试图从摄像头获取捕获图像的URI我为什么得到异常java.lang.NullPointerException:uri,
这是我的代码。
Uri selectedImage = data.getData();
file = new File(URI(selectedImage));
public String URI(Uri contentUri)
{
Cursor cursor = null;
try
{
String[] proj = {MediaStore.ACTION_IMAGE_CAPTURE};
cursor=getActivity().getContentResolver().query(contentUri,proj,null,null,null);
intcolumn_index=cursor.getColumnIndexOrThrow(MediaStore.ACTION_IMAGE_CAPTURE);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
答案 0 :(得分:1)
此代码中存在许多问题,甚至忽略了它不完整的事实。根据您的说法,我将假设您为startActivity()
致电ACTION_IMAGE_CAPTURE
,并且您的问题中的代码来自onActivityResult()
。
首先,ACTION_IMAGE_CAPTURE
的结果并未向您提供任何内容Uri
。如果您在EXTRA_OUTPUT
ACTION_IMAGE_CAPTURE
上使用Intent
,则根据您在EXTRA_OUTPUT
中输入的值,您的图片应该是您要求的图片。否则,您会从Bitmap
返回data.getExtra("data")
,代表缩略图大小的图片。
其次,即使file = new File(URI(selectedImage));
不是selectedImage
,null
也毫无意义。 AFAIK,该行甚至不会编译。即使这样,Uri
也不是File.
第三,MediaStore.ACTION_IMAGE_CAPTURE
不是从MediaStore
检索的有效列。
第四,你假设MediaStore
知道相机应用拍摄的照片。没有要求相机应用程序告诉MediaStore
这张照片。
FWIW,this sample app演示使用ACTION_IMAGE_CAPTURE
拍摄照片,然后使用Uri
对ACTION_VIEW
的图片进行观看,以便查看图片。