我打算从图库中选择一张图像,然后使用该图像将图像加载到ImageView项中。
但是图像不能正确旋转,因此我应该使用ExifInterface类,并且exif构造函数希望文件的路径为String而不是URI。
然后将URI转换为字符串,我编写了此方法:
private String getRealPathFromURI(Uri contentURI) {
String result;
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getActivity().getContentResolver()
.query(contentURI, proj, null, null, null);
if (cursor == null) {
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
result = cursor.getString(idx);
cursor.close();
}
return null;
}
问题从这里开始...
结果变量无论如何始终返回null。我已经尝试了很多在stackoverflow中找到的解决方案,如下所示:
那为什么所有这些都不起作用?我该怎么办?
答案 0 :(得分:2)
exif构造函数希望文件的路径为String而不是URI。
使用android.support.media.ExifInterface
。它有a constructor that takes an InputStream
。您可以通过在某些InputStream
(例如您的getContentResolver().openInputStream(uri)
)上调用Context
来获得Activity
,其中uri
是您的Uri
。
那为什么所有这些都不起作用?
因为该代码对Uri
做出了许多毫无根据的假设。不需要Uri
引用您可以访问的文件系统上的文件,也不需要query()
支持DATA
列。