【发布时间】:2013-01-01 17:03:08
【问题描述】:
我在尝试检索本地数据库中表的所有条目时遇到此错误:
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;
}
知道我做错了什么吗?非常感谢。
【问题讨论】:
-
我的理论是,您的查询无法为成功生成
Cursor所需的图像分配所需的所有内存。在不请求Blob列的情况下尝试该方法以及涉及它的后续方法,看看是否成功。 -
好的,如果是这种情况,有办法解决内存问题吗?
-
@mango 我按照你的建议做了,光标问题不再是问题。什么可能导致内存问题?
-
你确定光标已经初始化了吗?这个 sn-p 显示了您访问游标的过程,但不显示您如何/如果您初始化它和/或您的“db”。
标签: android sqlite cursor android-cursor