Метод возврата списка, возвращающий пустой список (хотя список заполняется) - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю над приложением для Android, которое использует базу данных SQLite для загрузки данных в список и их отображения.У меня есть класс DatabaseHelper, который имеет дело с методами CRUD для базы данных.Однако я пытаюсь найти конкретные результаты за определенную дату, хотя мой запрос возвращает ожидаемые результаты и заполняет список для возврата, я не могу вернуть этот список в своей основной активности.

Мой запросМетод:

public List<Earthquake>getListByDate(LocalDate dateInput){

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + PUB_DATE + " = " + "'"+dateInput+"'", null);

        Log.e("Cursor", ""+data.getColumnCount());
        Log.e("QueryReturnList", ""+QueryReturnList(data));

        return QueryReturnList(data);
    }

Журнал:

E / Курсор: 12

E / returnList: [объект, объект, объект...]

E / QueryReturnList: [объект, объект, объект ...]

QueryReturnList: (Этот метод создает список объектов из курсора ввода)

    private List<Earthquake>QueryReturnList(Cursor data){

            List<Earthquake>returnList = new ArrayList<>();

            int titleIndex = data.getColumnIndex(TITLE_COL),
                    descIndex = data.getColumnIndex(DESC_COL),
                    //... ;

            while(data.moveToNext()){
                Earthquake e = new Earthquake(
                        data.getString(titleIndex),
                        data.getString(descIndex),
                        //... ;
                );
                returnList.add(e);
            }
            Log.e("returnList",""+returnList);
            return returnList;
        }

Журнал:

E / returnList: [объект, объект, объект ...]

Когда я регистрирую эти результаты, они работают, как и ожидалось, в DatabaseHelper.Найдены правильные результаты, и QueryReturnList возвращает ожидаемый объект списка.

Однако, когда я вызываю этот список из своей основной деятельности и устанавливаю его в новый список, он кажется пустым, когда я его регистрирую (или отлаживаю).

List<Earthquake>earthquakes = mDatabaseHelper.getListByDate(currentDateSelection);
Log.e("earthquakesByDate", ""+earthquakes);

Журнал:

E / returnList: []

E / earthquakesByDate: []


Почему возвращается пустой списоккогда он действительно возвращает и регистрирует заполненный список изначально (в моем DatabaseHelper)?

Примечание: Кажется, он регистрирует «returnList» и «QueryReturnList» несколько раз при работе в неожиданном порядке.Методы не успевают получить все данные и вернуть?

1 Ответ

1 голос
/ 02 апреля 2019

Эта строка:

Log.e("QueryReturnList", ""+QueryReturnList(data));

вызывает QueryReturnList(data), поэтому после этого курсор повторяется и из-за:

while(data.moveToNext())

указатель курсора находится после последнегострока.Тогда это:

return QueryReturnList(data);

снова вызывает QueryReturnList(data), и когда оно достигает этого:

while(data.moveToNext())

, оно пропускает цикл, потому что moveToNext() возвращает false.Так что лучше пропустите эту строку:

Log.e("QueryReturnList", ""+QueryReturnList(data));

или перепишите getListByDate(), например:

public List<Earthquake>getListByDate(LocalDate dateInput){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + PUB_DATE + " = " + "'"+dateInput+"'", null);
    Log.e("Cursor", ""+data.getColumnCount());
    List<Earthquake> list = QueryReturnList(data);
    Log.e("QueryReturnList", ""+list);
    return list;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...