我有一个ImageButton,我想用它来为SQLiteDatabase中的项设置一个布尔值。
ImageButton将显示一个值为“1”的图像,另一个图像显示值为“0”的图像。按图像按钮应切换数据库字段,从而切换其图像。
出于某种原因,当我按下按钮时,尽管在数据库上调用了update方法,但currentCursor.getInt()返回的值仍然相同。我是否必须更新/刷新光标?
在我的活动中,我有:
private void updateFavouriteButton(){
int favourite = currentCursor.getInt(currentCursor.getColumnIndex(Object.favourite));
if (favourite == 1)
{
favouriteButton.setImageDrawable(getResources().getDrawable(R.drawable.favourite_selected));
favouriteButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dbHelper.updateFavourite(selectedId, 0);
updateFavouriteButton();
}
});
}
else
{
favouriteButton.setImageDrawable(getResources().getDrawable(R.drawable.favourite));
favouriteButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dbHelper.updateFavourite(selectedId, 1);
updateFavouriteButton();
}
});
}
}
在我的数据库助手中,我有:
public void updateFavourite(long rowId, int favourite)
{
db.beginTransaction();
try {
ContentValues args = new ContentValues();
args.put("ZFAVOURITE", favourite);
int rowsAffected = db.update("ZOBJECT", args,"_id" + "=" + rowId, null);
if (rowsAffected > 0)
db.setTransactionSuccessful();
} catch (Exception e) {
Log.e("Error in transaction", e.toString());
} finally {
db.endTransaction();
}
}
答案 0 :(得分:2)
不推荐使用requery(),文档说只关闭旧光标,重新制作它,然后使用新光标。
游标是创建时的快照。如果更改了数据库,则必须重新查询。
答案 1 :(得分:0)
正如@Pyrodante所说,由于requery()
已被弃用,因此需要requery()
光标{/ 1}}
不确定你们如何解决它,这就是我如何解决这个问题。
如果有更好的方法,请告诉我。谢谢!
Cursor newCursor=CreateCursor(); //ChreateCursor() create a method which returns you a new cursor
mAdapter.changeCursor(newCursor); //Change to the new cursor so that the list will be updated