Ошибка при запросе в SQL
Ошибка:
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:474)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at com.example.arraylist.DBHelper.getSubtaskChecked(DBHelper.java:193)
at com.example.arraylist.SubtaskViewHolder.bind(SubtaskViewHolder.java:27)
at com.example.arraylist.MultiTypeTaskAdapter.onBindChildViewHolder(MultiTypeTaskAdapter.java:135)
at com.example.arraylist.MultiTypeTaskAdapter.onBindChildViewHolder(MultiTypeTaskAdapter.java:11)
Сначала я передаю класс из адаптера холдеру:
@Override
public void onBindChildViewHolder(SubtaskViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
final Subtask subtask = (Subtask) group.getItems().get(childIndex);
holder.bind(subtask);
}
В холдере я отправляю в бд запрос(dbHelper.getSubtaskChecked), чтобы получить Boolean переменную
ViewHolder:
public class SubtaskViewHolder extends ChildViewHolder {
private DBHelper dbHelper;
private TextView task;
private CheckBox checkBox;
public SubtaskViewHolder(View itemView) {
super(itemView);
task = itemView.findViewById(R.id.subtask);
checkBox = itemView.findViewById(R.id.checkBox);
}
public void bind(final Subtask subtask) {
task.setText(subtask.task);
dbHelper = new DBHelper(itemView.getContext());
final Boolean checked = dbHelper.getSubtaskChecked(subtask.id);
checkBox.setChecked(checked);
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dbHelper = new DBHelper(v.getContext());
dbHelper.updateTableSubtasks_checkBox(subtask.id, checked);
}
});
}
}
getSubtaskChecked:
public Boolean getSubtaskChecked(Long id) {
SQLiteDatabase db = this.getReadableDatabase();
String[] selectionArgs = new String[] {String.valueOf(id)};
Cursor cursor = db.query(TABLE_SUBTASKS, null,
"_id = ?", selectionArgs, null, null, null);
cursor.moveToFirst();
Boolean checked = Boolean.valueOf(cursor.getString(cursor.getColumnIndex(COLUMN_CHECKED)));
cursor.close();
return checked;
}