При чтении данных из SQL считывается только первая строка
Мне надо считать все данные из SQL. Но у меня всегда читается только первая строка.
Код:
public ArrayList<Task> elementsHome(){
ArrayList<Task> tempElements = new ArrayList<>();
cursor = db.query(TABLE_HOME, null, null, null,
null, null, null);
if(cursor.moveToFirst()){
do{
Long id = cursor.getLong(cursor.getColumnIndex(COLUMN_ID));
String task = cursor.getString(cursor.getColumnIndex(COLUMN_TASK));
String comment = cursor.getString(cursor.getColumnIndex(COLUMN_COMMENT));
String dateString = cursor.getString(cursor.getColumnIndex(COLUMN_DATE_STRING));
Long dateStart = cursor.getLong(cursor.getColumnIndex(COLUMN_DATE_START));
Long dateFinish = cursor.getLong(cursor.getColumnIndex(COLUMN_DATE_FINISH));
ArrayList<Subtask> subtasks = elementsSubtask(task);
tempElements.add(new Task(id, task, comment, dateString,
dateStart, dateFinish, subtasks));
}while (cursor.moveToNext());
}
cursor.close();
Log.e("DEBUG", String.valueOf(tempElements.size()));
return tempElements;
}
Ответы (2 шт):
Автор решения: default locale
→ Ссылка
Именно в данном кусочке кода проблемы не видно. Нужен полноценный пример для воспроизведения.
Единственное, что смущает, так это то, что переменная cursor объявлена где-то вне метода. Подозреваю, что эта переменная используется в других методах, например, в elementsSubtask. Также подозреваю, что в других методах переменной присваивается новый курсор, который считывается до конца.
Предлагаю объявить cursor на уровне метода и посмотреть, что получится:
Cursor cursor = db.query(TABLE_HOME, null, null, null,
null, null, null);
Автор решения: Aziz Umarov
→ Ссылка
Как заметили выше предлагаю сделать чуток по другому
public ArrayList<Task> elementsHome(){
ArrayList<Task> tempElements = new ArrayList<>();
cursor = db.query(TABLE_HOME, null, null, null,
null, null, null);
if(cursor.moveToFirst()){
do{
Long id = cursor.getLong(cursor.getColumnIndex(COLUMN_ID));
String task = cursor.getString(cursor.getColumnIndex(COLUMN_TASK));
String comment = cursor.getString(cursor.getColumnIndex(COLUMN_COMMENT));
String dateString = cursor.getString(cursor.getColumnIndex(COLUMN_DATE_STRING));
Long dateStart = cursor.getLong(cursor.getColumnIndex(COLUMN_DATE_START));
Long dateFinish = cursor.getLong(cursor.getColumnIndex(COLUMN_DATE_FINISH));
tempElements.add(new Task(id, task, comment, dateString,
dateStart, dateFinish, null));
}while (cursor.moveToNext());
}
cursor.close();
// Идея считать подтаски отдельно вне курсора. Сделал setSubtasks в надежде что он существует
for(Task task: tempElements) {
task.setSubtasks(elementsSubtask(task.getName()));
}
Log.e("DEBUG", String.valueOf(tempElements.size()));
return tempElements;
}