【发布时间】:2020-10-04 10:26:56
【问题描述】:
我的代码:
public void loadImageFromStorage(Context context,Activity activity){
Uri uri=null;
Uri uriExternal= MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
int colIndexId;
///////////////////////////////////////////////////
Cursor cursor=getContentResolver().query(uriExternal,null,null,null,null);
//////////////////////////////////////////////////
if(cursor!=null){
colIndexId=cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
int noOfRows=cursor.getCount();
boolean isFirstRow=cursor.moveToFirst();
do
{
uri= ContentUris.withAppendedId(uriExternal,cursor.getLong(colIndexId));
imageUri.add(uri);
}while(cursor.moveToNext());
cursor.close();
ImageAdapter imageAdapter=new ImageAdapter(this,imageUri,getContentResolver());
gridView.setAdapter(imageAdapter);
}}
在我的代码中
cursor.getCount() 返回 0 和 cursor.moveToFirst() 返回 false (这意味着我的光标指向的表包含 0 行)。此时我的代码无法正常工作。我使用了正确的 mediastore uri,但我仍然无法从图库中获取图像。我不知道我在这里缺少什么? 最近几天我遇到了这个问题,但我仍然无法解决它。
请帮我解决这个问题。
提前致谢
【问题讨论】:
-
colIndexId=cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID); int noOfRows=cursor.getCount();在检查 null 之前,您已经使用了两次 cursor。请更改您的代码以使其健壮。没有三遍! -
不要调用 moveToFirst 两次。
-
放入 colIndexId=cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID); int noOfRows=cursor.getCount(); if 语句中的这两行(cursor!=null) 但仍然 cursor.getCount 返回 0 并且 moveToFirst 返回 false
-
如果 cursor==null,这并不能避免 NullPointerException。如果您认为确实如此,那为什么还要稍后检查 null 呢?
-
这是我在调试 cursor={ContentResolver$CursorWrapperInner@9670} 、 noOfRows==0 和 isFirstRow=false 后得到的,并且在我的 do while 循环中生成错误原因:android.database .CursorIndexOutOfBoundsException: 请求索引 0,大小为 0
标签: android cursor mediastore