Не могу найти ошибку в моей инициализации курсора - PullRequest
0 голосов
/ 30 марта 2019

А для более крупного проекта APP мне нужно работать с базой данных SQLite. Если мой код работает, я не получаю никаких данных. И я думаю, что просто не понимаю объект курсора. В этом коде я просто хочу вернуть имя, но все равно, что мой курсор не инициализирован правильно, но я получил основной код от разработчиков Android. Поэтому я не могу понять, почему это не работает.

public String getVorname (String nachname) {
    SQLiteDatabase db = this.getReadableDatabase();

    String[] projection = {ListeNamen.VORNAME};
    String selection =ListeNamen.NACHNAME+" = ?";
    String[] selectionArgs ={nachname};
    String sortOrder = ListeNamen._ID + " DESC";
    Cursor cursor = db.query(ListeNamen.TABLE_NAME,projection,selection,selectionArgs,null,null,sortOrder);

    cursor.moveToFirst();
    String vorname =cursor.getString(cursor.getColumnIndex(ListeNamen.NACHNAME));
    cursor.close();
    return vorname;
}

Я бы вернул "Ян" в виде строки, но это показывает мне эту ошибку

java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
     at android.database.CursorWindow.nativeGetString(Native Method)
     at android.database.CursorWindow.getString(CursorWindow.java:438)
     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
     at com.example.mainaplikation.DBHelper.getVorname(DBHelper.java:58)
     at com.example.mainaplikation.MainActivity$1.onClick(MainActivity.java:29)

1 Ответ

1 голос
/ 30 марта 2019

При этом:

String[] projection = {ListeNamen.VORNAME};

Вы определяете столбцы, которые вы хотите выбрать запрос.
Итак, вы хотите только столбец ListeNamen.VORNAME.
Но с этим:

String vorname =cursor.getString(cursor.getColumnIndex(ListeNamen.NACHNAME));

вы пытаетесь получить столбец ListeNamen.NACHNAME, которого нет в результатах.
По имени переменной vorname думаю, вы хотите сделать:

String vorname =cursor.getString(cursor.getColumnIndex(ListeNamen.VORNAME));

но поскольку в результатах содержится только 1 столбец, вы также можете сделать:

String vorname =cursor.getString(0);
...