Заполните список из данных базы данных - PullRequest
0 голосов
/ 03 декабря 2018

пожалуйста, мне нужна ваша помощь, чтобы выяснить, почему эти строки кода не работают.Я хотел бы заполнить список элементами String, взятыми из базы данных.

Это метод fillTheList (), который возвращает список:

public List<String> fillTheList() {
    List<String> list = new ArrayList<String>();

//My database is called "ITEMS_" and the first column is called "typeOfItem"
    String[] column = {"typeOfItem"};
    String selection = "SELECT DISTINCT type FROM ITEMS_";

    Cursor cursor = MainActivity.sqLiteHelper.getDataCategories("ITEMS_", column, selection);

    if(cursor != null) {
        list.clear();

        if (cursor.moveToFirst()) {
            do {
                String type = cursor.getString(1);

                list.add(type);
            } while (cursor.moveToNext());
        }
    }
    Log.d("List", cursor.getString(1));
    return list;
}

Метод getDataCategories () представляет собой методsqLiteHelper-class

public Cursor getDataCategories(String table, String[] columns, String selection )
{
    SQLiteDatabase database = getReadableDatabase();
    Cursor cursor = database.query(true, table, new String[] {String.valueOf(columns)}, selection,
            null, null, null, null, null);
    return cursor;
}

Ошибка возникает по адресу: курсор курсора = MainActivity.sqLiteHelper.getDataCategories ("ITEMS_", столбец, выделение);и logcat: «Причина: java.lang.NullPointerException: попытка вызвать виртуальный метод» android.database.Cursor SQLiteHelper.getDataCategories (java.lang.String, java.lang.String [], java.lang.String)'на нулевой ссылке на объект "

1 Ответ

0 голосов
/ 03 декабря 2018

В журнале ошибок указано, что MainActivity.sqLiteHelper равно null.Я не знаю, в каком классе у вас fillTheList(), но вы решаете проблему с неправильным заполнением списка.Измените fillTheList() следующим образом:

public List<String> fillTheList() {
    List<String> list = new ArrayList<>();
    Cursor cursor = sqLiteHelper.getDataCategories();
    if(cursor != null) {
        if (cursor.moveToFirst()) {
            do {
                list.add(cursor.getString(0));
            } while (cursor.moveToNext());
        }
    }
    return list;
}

Как видите, вы должны предоставить контекст для инициализации SQLiteHelper для извлечения курсора и заполнения списка.Затем измените getDataCategories() на следующее:

public Cursor getDataCategories() {
    SQLiteDatabase database = getReadableDatabase();
    return database.rawQuery("SELECT DISTINCT typeOfItem FROM ITEMS_", null);
}

Этот метод использует rawQuery(), что проще, а не query().Я не знаю, является ли имя столбца typeOfItem или type, поэтому, если вам нужно изменить оператор SQL.Теперь вы можете использовать fillTheList(), если сначала у вас есть действительный объект SQLiteOpenHelper, скажем sqlObject, например:

List<String> list = sqlObject.fillList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...