最近在工作中遇到这个问题,我的应用中有个功能,点击某Imagview进入手机图库,点击图片后返回Activity获得所选图片的路径,在代码中提供了下面的方法:
public String getRealPathFromURI(Uri contentUri) {
String res = null;
String[] proj = {MediaStore.Images.Media.DATA};
// Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
CursorLoader loader = new CursorLoader(this, contentUri, proj, null, null, null);
// Cursor cursor= managedQuery(contentUri, proj, null, null, null);
Cursor cursor=loader.loadInBackground();
Log.i("msg","=============>>>>>>>>"+contentUri);
Log.i("msg","cursor=============>>>>>>>>"+cursor.toString());
if (cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
Log.i("msg","column_index=============>>>>>>>>"+column_index);
res = cursor.getString(column_index);
Log.i("msg","res=============>>>>>>>>"+res);
}
cursor.close();
return res;
}
但是运行后返回值为null,百思不得其解,Logcat的消息如下:
12-03 14:18:31.555 1788-1788/dev.sunshine.song.driver I/msg: ==============>>>>>>>>>content://com.android.providers.media.documents/document/image%3A245050
12-03 14:18:31.585 1788-1788/dev.sunshine.song.driver I/msg: cursor=============>>>>>>>>android.content.ContentResolver$CursorWrapperInner@43591110
12-03 14:18:31.585 1788-1788/dev.sunshine.song.driver I/msg: column_index=============>>>>>>>>0
12-03 14:18:31.585 1788-1788/dev.sunshine.song.driver I/msg: res=============>>>>>>>>null
12-03 14:18:31.620 1788-1788/dev.sunshine.song.driver I/msg: path====================>>>>>>>>>>null
我也试过用IO流的方式获取位图,也的确能显示,但因为此方法得到的路径在程序的其他地方还会调用,所以不好绕过,所以请论坛大神帮忙看看这个方法哪有问题?