我是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);
}
答案 0 :(得分:4)
游标不是动态的;它显示了执行查询时数据库的快照。
当数据库发生变化时,您必须再次执行查询。
答案 1 :(得分:0)
正如@Sreekanth在评论部分所建议的那样,每当点击喜欢的图像时,我都会更新光标。虽然它工作正常但我认为它是一种解决方法而不是解决方案。也许我说错了。