我想实现一个Picture Chooser,因为最新图片和下载文件夹存在错误,当从这两个图片中选择图片时Android应用程序崩溃了文件夹,我想隐藏它们,或者直接打开Gallery文件夹而不显示Folder chooser面板,
这是我的实际代码:
Intent intent = new Intent (Intent.ACTION_GET_CONTENT);
startActivityForResult (intent, 1000);
并在结果方法中:
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent intent) {
super.onActivityResult (requestCode, resultCode, intent);
String uri = intent.getDataString ();
String absolutePath = getRealPathFromURI (uri);
String compressedFilePath = compressImage (absolutePath);
encodedResult = base64File (new File (compressedFilePath)); //String
}
protected String getRealPathFromURI (String contentURI, UIView uiView) {
Uri contentUri = Uri.parse(contentURI);
Cursor cursor = ((ContextWrapper) uiView).getContentResolver ().query(contentUri, null, null, null, null);
if (cursor == null) {
return contentUri.getPath();
} else {
cursor.moveToFirst();
int index = cursor.getColumnIndex(MediaColumns.DATA);
return cursor.getString(index);
}
}
因此,当我从文件夹中选择一个图像时,如:图库,图片等...它工作得很好。但对于2个文件夹:下载和最近,它会崩溃并给我:
java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
或许有更正确的方法可以做到这一点,我不知道它?
你对此有任何想法吗?我怎样才能做到这一点?感谢。
答案 0 :(得分:0)
它崩溃并给了我
这是因为您假设任何Uri
都可以转换为File
。这从未受到支持。
使用ContentResolver
并Uri
通过openInputStream()
(或openOutputStream()
,如果适用)消费。