Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
// Get the cursor
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
// Move to first row
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imgDecodableString = cursor.getString(columnIndex);
cursor.close();
cursor.getString(columnIndex)返回Null 其中 selectedImage 不为空。
有关如何从URI创建文件的任何建议吗?
答案 0 :(得分:0)
从URI
获取文件路径时,Cursor返回null
Uri
不是文件。 Uri
不必指向文件,更不用说文件系统上可以访问的文件。
有关如何从URI创建文件的任何建议吗?
使用ContentResolver
和openInputStream()
获取InputStream
标识的内容Uri
。理想情况下,直接使用InputStream
。如果由于某种原因,您确实需要一个文件:
在您控制的某个文件上创建FileOutputStream
(例如,在getCacheDir()
中)
将字节从InputStream
复制到FileOutputStream
使用您刚刚创建的文件,完成后将其删除
答案 1 :(得分:-3)
使用此方法获取路径:
public String getPath(Uri uri) {
// just some safety built in
if (uri == null) {
return null;
}
// try to retrieve the image from the media store first
// this will only work for images selected from gallery
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
// this is our fallback here
return uri.getPath();
}
在onACtivityResult中使用:
Uri selectedImage = data.getData();