响应SQLiteDatabase的更新

时间:2011-08-03 22:08:46

标签: android sqlite

我有一个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();
        }


    }

2 个答案:

答案 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