在DatabaseHelper类中考虑此方法:
public Cursor getRules()
{
SQLiteDatabase db=this.getReadableDatabase();
Cursor cur=db.rawQuery("SELECT * from Rules",new String [] {});
Log.d("Cursor Size", "" + cur.getCount());
db.close();
return cur;
}
它返回一个Cursor,在活动上,我就像
一样消耗它 Cursor ruleCursor=DatabaseHelper.getInstance(this).getRules();
if(ruleCursor!=null)
{
RuleManager.getInstance(this,null).loadRules(ruleCursor);
ruleCursor.close();
}
(我没有移动DatabaseHelper类中的整个游标处理而只返回一个Objects而不是cursor的列表),问题是如果我在getRules()中没有Log.d,整个程序就会失败。我收到“fillWindow()中的无效语句”错误,并且SQLite不会在“选择”语句中返回任何行。
只需为cursor.getCount()添加Log.d即可解决所有问题。另外,要提一下,这个东西直到昨天还能正常工作,并且从最后一个晚上开始表现得像这样。
我错过了什么吗?这种行为有望吗?
答案 0 :(得分:1)
尝试使用此
//在这里停止担心DatabaseHelper。
public Cursor getAllRows() {
Cursor c=getReadableDatabase().rawQuery("select * from RULES", null);
return c;
}
//以及你在哪里使用Cursor(或“消费”你的光标)。
c=db.getAllRows();
startManagingCursor(c);
希望它可以帮到你!!