Android 游标未正确初始化

Android 游标未正确初始化,android,sqlite,cursor,android-cursor,Android,Sqlite,Cursor,Android Cursor,我在尝试检索本地数据库中表的所有条目时遇到此错误: java.lang.RuntimeException:无法启动活动组件信息{com.example.contactappca2/com.example.contactappca2.ViewActivity}:java.lang.IllegalStateException:无法从游标窗口读取第0行第0列。在从光标访问数据之前,确保光标已正确初始化。 原因:java.lang.IllegalStateException:无法从游标窗口读取第0行第0

我在尝试检索本地数据库中表的所有条目时遇到此错误:

java.lang.RuntimeException:无法启动活动组件信息{com.example.contactappca2/com.example.contactappca2.ViewActivity}:java.lang.IllegalStateException:无法从游标窗口读取第0行第0列。在从光标访问数据之前,确保光标已正确初始化。

原因:java.lang.IllegalStateException:无法从游标窗口读取第0行第0列。在从光标访问数据之前,确保光标已正确初始化。

这是我在DbAdapter类中检索条目的方法:

public List<Contact>getAllContacts(){
    contacts = new ArrayList<Contact>();
    cursor = db.query(TABLE_NAME, new String [] {COLUMN_NAME, COLUMN_NUMBER, COLUMN_EMAIL, COLUMN_IMG}, null,null,null,null,null);
    if(cursor.moveToFirst()){
        do{
            c = new Contact();
            c.setName(cursor.getString(0), null);
            c.setNumber(cursor.getString(1));
            c.setEmail(cursor.getString(2));
            byte [] blob = cursor.getBlob(cursor.getColumnIndex(COLUMN_IMG));
            ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
            Bitmap b = BitmapFactory.decodeStream(inputStream); 
            c.setPicture(b);
            contacts.add(c);
        }while(cursor.moveToNext());
    }

    return contacts;
}
public ListgetAllContacts(){
联系人=新的ArrayList();
cursor=db.query(表名,新字符串[]{COLUMN\u NAME,COLUMN\u NUMBER,COLUMN\u EMAIL,COLUMN\u IMG},null,null,null,null,null);
if(cursor.moveToFirst()){
做{
c=新触点();
c、 setName(cursor.getString(0),null);
c、 setNumber(cursor.getString(1));
c、 setEmail(cursor.getString(2));
字节[]blob=cursor.getBlob(cursor.getColumnIndex(COLUMN_IMG));
ByteArrayInputStream inputStream=新的ByteArrayInputStream(blob);
位图b=BitmapFactory.decodeStream(inputStream);
c、 设置图片(b);
增加(c);
}while(cursor.moveToNext());
}
返回联系人;
}

知道我做错了什么吗?非常感谢。

好的,要做的一件事是确保在创建此游标之前关闭其他的
游标(以释放内存)

但是,如果您尝试将内容分块发布,您会看到更好的结果,这与无休止地加载listview或类似内容的效果非常相似


但是我必须说,如果我一开始就遇到这样的问题,我会放弃使用
SQLite
来保存这样完整的对象的想法。更好的做法是将这些图像存储在sd卡或本地内存中,只在数据库中保存图像位置或至少名称,然后以这种方式管理您的内容。

我的理论是,您的查询无法为成功生成
光标所需的图像分配所有内存。在不请求
Blob
列的情况下尝试该方法以及后续涉及该方法的方法,看看是否成功。好的,如果是这样的话,有什么方法可以解决内存问题吗?@mango我按照您的建议做了,光标问题不再是问题。什么可能导致内存问题?您确定游标已初始化吗?此代码段显示了访问光标的过程,但没有显示如何/是否初始化光标和/或“db”。:您好,如果您愿意帮助我解决此问题。谢谢