[英]onActivityResult data.getData() returns null after taking camera shot
[英]NullPointerException when calling data.getData inside OnActivityResult()?
我正在尝试通过调用显示相机拍摄的已保存照片的路径
`data.getdata`
在Toast中,但App崩溃了。 我也试过data.getDataString
但它没有解决
任何事情。
码:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "My Images");
imagesFolder.mkdirs();
File image = new File(imagesFolder, "img01");
Uri uriSavedImage = Uri.fromFile(image);
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(imageIntent,CAMERA_REQUEST_CODE);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == CAMERA_REQUEST_CODE) && (resultCode == RESULT_OK)) {
Toast.makeText(getApplicationContext(), "Image Saved To: "+data.getData(), Toast.LENGTH_SHORT).show();
}
从您的意图获取额外的捆绑包,可以访问结果数据。
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
不要忘记空检查,因为我的印象是标签“data”在所有手机上都无效。
编辑:使代码更精确,即在此提供精确的解决方案。
也可以使用data.getData().toString()
data.getData().toString()
应该有效。 但是,它实际上不会为您提供存储图像的实际路径。 它宁愿给你一个该图像的URI
。 你需要解析那个uri使用。
public String getRealPathFromURI(String uriString) {
try {
String[] proj = { MediaStore.Image.Media.DATA};
Log.d("First", proj[0]);
Cursor cursor = managedQuery(Uri.parse(uriString), proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Image.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "Alas!";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.