我想在选中CheckBox时更新表中的列。
我尝试过
Log.d("print", " " + res.getString(res.getColumnIndex("name")));
但是给我这个错误 无法从CursorWindow读取行0,col -1。在从游标访问数据之前,请确保游标已正确初始化。
RecyclerViewAdapter:
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);
}
}
});
DatabaseHandler:
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")));
我知道它没有更新,因为当我打印整个表格时,它是旧值。
答案 0 :(得分:1)
我想在选中CheckBox时更新表中的列
然后,您需要使用一种在表上执行SQL UPDATE查询的方法。您已经有ContentValues
,可以将其传递给update()
。
但是给我这个错误无法从CursorWindow读取行0,col -1。在从游标访问数据之前,请确保游标已正确初始化。
您的选择只有DESCRIPTION
列,但是您正在尝试阅读name
列。 getColumnIndex()
对于光标中不存在的列返回-1。
您还应该检查moveToFirst()
的返回值-如果移动成功并且光标指向有效行,它将返回true。