1

尝试检索本地数据库上表的所有条目时出现此错误:

java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.contactappca2/com.example.contactappca2.ViewActivity}:java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行第 0 列。确保在从光标访问数据之前正确初始化光标。

原因:java.lang.IllegalStateException:无法从 CursorWindow 读取第 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;
}

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

4

1 回答 1

0

要做的一件事是确保Cursors在你做这个之前你的另一个是关闭的(为了释放内存)。

但是,如果您尝试将内容分块取出,您会看到更好的结果,这与无休止地加载列表视图或类似内容的效果非常相似。

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

于 2013-01-18T03:00:07.300 回答