简单的光标记录可以改变整个程序的行为吗?

时间:2012-03-02 04:41:27

标签: android sqlite cursor logging

在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即可解决所有问题。另外,要提一下,这个东西直到昨天还能正常工作,并且从最后一个晚上开始表现得像这样。

我错过了什么吗?这种行为有望吗?

1 个答案:

答案 0 :(得分:1)

尝试使用此

//在这里停止担心DatabaseHelper。

public Cursor getAllRows() {
    Cursor c=getReadableDatabase().rawQuery("select * from RULES", null);
    return c;
}

//以及你在哪里使用Cursor(或“消费”你的光标)。

c=db.getAllRows();
startManagingCursor(c);

希望它可以帮到你!!