我在阅读数据库时出现光标错误:
04-07 18:11:25.672: ERROR/AndroidRuntime(5801): android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=666 (# cursors opened by this proc=666)
它发生在
行cursor.getCount()
整个文件是8kb,它有32行,但ID从737到768,是不是问题呢?
(我注意到如果ID低于600,则没有问题)
答案 0 :(得分:0)
(OP在问题编辑中回答问题。转换为社区维基答案。请参阅Question with no answers, but issue solved in the comments (or extended in chat))
OP写道:我解决了这个问题。我的代码是:
public News getNewsWithID(int id){
Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
return cursorToNews(c);
}
我改为:
public News getNewsWithID(int id){
Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
News temp = cursorToNews(c);
c.close();
return temp;
}
我以为光标是在onDestroy()上关闭的。
答案 1 :(得分:0)
您应该在finally
块中关闭光标,以确保即使发生异常也将其关闭。
public News getNewsWithID(int id){
Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
try {
return cursorToNews(c);
} finally {
c.close();
}
}