Java 更新查询游标-无法从游标窗口读取第0行第1列

Java 更新查询游标-无法从游标窗口读取第0行第1列,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,选中复选框后,我想更新表中的一列 我试过这个 Log.d("print", " " + res.getString(res.getColumnIndex("name"))); 但是他给了我这个错误 无法从游标窗口读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化 回收服务适配器: checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Overr

选中复选框后,我想更新表中的一列

我试过这个

Log.d("print", "  " + res.getString(res.getColumnIndex("name")));
但是他给了我这个错误 无法从游标窗口读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化

回收服务适配器:

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d ("print", "item clicked");
                if (checkBox.isChecked()){
                    databaseHandler.updateHabit(name.getText().toString(), false);
                }else{
                    DatabaseHandler databaseHandler = new DatabaseHandler(ctx);
                    databaseHandler.updateHabit(name.getText().toString(), true);
                }
            }
        });
数据库处理程序:


SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(Constants.Habit.HABIT_COL_DONE, done);

Cursor res = db.rawQuery("SELECT DESCRIPTION from HABIT_DESCRIPTION WHERE NAME = '" + s + "'", null);

res.moveToFirst();
Log.d("print", "  " + res.getString(res.getColumnIndex("name")));
我知道它没有更新,因为当我打印整个表时,它是旧值

选中复选框后,我想更新表中的列

然后,您需要使用一个对表执行SQL更新查询的方法。您已经有ContentValue,可以将其传递给

但出现此错误,无法从CursorWindow读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化

您选择的内容只有“说明”列,但您正在尝试读取列名。对于游标中不存在的列,getColumnIndex返回-1


您还应该检查moveToFirst的返回值-如果移动成功且光标指向有效行,则返回true。

@MikeT Thank,我的想法输入错误。更正。