【问题标题】:How to update only status on a Button click using in SQLite in android如何在 android 的 SQLite 中使用仅更新按钮单击的状态
【发布时间】:2017-02-19 22:57:48
【问题描述】:

我正在开发一个 SQLite 数据库。我创建了一个表,其架构为:名称、图像、isselected。
消息的初始状态为 0。
我正在使用数据库上的setStatus() 方法更新按钮单击的状态。
但是状态没有改变。
我想单击一次按钮并将状态设置为 1,然后再次单击以将状态重新设置为 0。

setStatus()函数如下图所示:

 public int setStatus(People people) {
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    people.setStatus(1);
    values.put(STATUS, people.getStatus());

    return sqLiteDatabase.update(TABLE_PEOPLE, values, ID + "=?",
            new String[]{String.valueOf(people.getId())});

}

我的按钮点击事件

 btnBuildNow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            peopleListSelected = new ArrayList<>();
            for (People people : peopleList) {
                if (people.getStatus()==1) {
                    db.setStatus(people);
                    peopleListSelected.add(people);
                }
            }
            if (peopleListSelected.size() > 0) {
                Intent intent = new Intent(BulidActivity.this, AlertList.class);
                intent.putExtra("arrayList", (Serializable) peopleListSelected);
                startActivity(intent);
            }
        }
    });

【问题讨论】:

  • 您是否先在 TABLE_PEOPLE 中添加了带有 "id=" + ISSELECTED 的行?
  • 你在哪里设置ISSELECTED
  • 不,我没有添加行,仅更改按钮单击@Serg中的状态
  • 静态数据集 ISSELECTED=0 @Fildor
  • 如果表中没有 id=0 的行,update 找不到要更新的内容。在您的应用程序/活动中的某处,您必须创建并填充表格。请出示此代码。

标签: java android sqlite arraylist android-sqlite


【解决方案1】:

您没有传递要更新的行的 id(或者您要更新所有行?),未声明 ISSELECTED 变量。我的意思是这一行:

sqldb.update(TABLE_PEOPLE, cv, "id=" + ISSELECTED, null);

我会这样写(现在我无法测试它)。我会将选定的 id 传递给更新方法的第三个参数(即 where 子句,请参阅文档:https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html):

public String setStatus(String selected) {
    SQLiteDatabase sqldb = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("isselected", 1);
    sqldb.update(TABLE_PEOPLE, cv, "id=" + selected, null);
    sqldb.close();
    return "Anything you want";
}

另一种可能的解决方案是直接编写查询:

public String setStatus(String selected) {
        SQLiteDatabase sqldb = this.getWritableDatabase();
        sqldb.execSQL("UPDATE TABLE_PEOPLE SET ISSELECTED=1 WHERE id=" + selected);
        sqldb.close();
        return "Anything you want";
    }

编辑: 抱歉,我忘记告诉修改按钮单击事件,其中调用了db.setStatus();:使用db.setStatus(people.getId());,或类似的东西(people.id,或代表人员对象ID的东西,如果有的话。如果它没有 id,你应该以某种方式从数据库中获取 id。)

【讨论】:

  • 好的,我试试看!
  • 但是如何在对象模型中设置和获取这个状态呢?
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2020-01-12
  • 1970-01-01
  • 2022-07-08
  • 2021-01-06
相关资源
最近更新 更多