光标未正确初始化

时间:2013-01-18 01:45:08

标签: android sqlite cursor android-cursor

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

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

引起:java.lang.IllegalStateException:无法从CursorWindow读取第0行,第0列。在从中访问数据之前,请确保Cursor已正确初始化。

这是我在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;
}

任何想法我做错了什么?非常感谢。

1 个答案:

答案 0 :(得分:0)

要做的一件事是确保你的其他Cursors在你制作这个之前关闭(为了释放记忆)。

但是如果你试图将你的内容整理成块,你会看到更好的结果,这很大程度上是因为无休止地加载列表视图或类似的东西。

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