在实时更新SQLite数据库时,无法显示Cursor的更新值

时间:2014-07-15 09:58:04

标签: android database sqlite android-sqlite android-cursor

我是Android的新手,并试图逐个模块地学习如何工作。这就是我要做的事情:

显示带有收藏夹的单词复选框(图像)。如果用户点击它,则更新数据库并且数据库表中的列存储其值(1表示已选中,0表示未选中)。我正在使用光标来检索单词和收藏夹复选框的值。正确点击喜欢的图像可以毫无问题地更新数据库。

我面临的问题是:

除非我退出应用程序并再次启动它,否则游标不会获取最近对数据库所做的更改。为了进一步解释,当我导航到下一个/上一个单词(使用屏幕底部的按钮)时,检索到的值不是最新的,即看起来光标仍然具有旧的数据库值而不是更新的。

我通过Google搜索,StackOverflow获得了具体的解决方案,但似乎我没有使用正确的搜索字词。我知道这与更新游标和requery折旧这一事实有关,但我又失去了方向。

[编辑]使用下面提到的方法获取Cursor:

public Cursor getWords() {

        SQLiteDatabase db = getReadableDatabase();
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

        String[] sqlSelect = {"_id", "word", "favourite"};
        String sqlTables = "word_list";

        qb.setTables(sqlTables);
        Cursor c = qb.query(db, sqlSelect, null, null,
                null, null, null);

        c.moveToFirst();
        return c;
    }

当用户点按收藏图片以更新数据库时,将调用此方法:

public void setFavWord(int markFav, int wordPos) {

    SQLiteDatabase db = getWritableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    ContentValues values = new ContentValues();
    values.put("favourite", markFav);

    db.update("word_list", values, "_id = " + wordPos, null);
}

2 个答案:

答案 0 :(得分:4)

游标不是动态的;它显示了执行查询时数据库的快照。

当数据库发生变化时,您必须再次执行查询。

答案 1 :(得分:0)

正如@Sreekanth在评论部分所建议的那样,每当点击喜欢的图像时,我都会更新光标。虽然它工作正常但我认为它是一种解决方法而不是解决方案。也许我说错了。