курсор падает с CursorIndexOutOfBoundsException

1

Мой курсор сбивает мое приложение с ошибкой базы данных Android.

CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

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

public Cursor getAllDataTableStaffDatabase(String table_name){
     this.open();
     Cursor result =this.mDb.rawQuery("SELECT * FROM " + table_name,null);
     return result;// fonctionne très bien
}

public String findNameOfStaffBymail(String mail) {
    String sql = " SELECT  *  FROM " + DatabaseStaffHandler.STAFF_TABLE_NAME + " WHERE " + DatabaseStaffHandler.STAFF_MAIL + " = ? ";
    Cursor result = super.mDb.rawQuery(sql, new String[]{mail});
    Cursor data = super.getAllDataTableStaffDatabase(DatabaseStaffHandler.STAFF_TABLE_NAME);

    String test = result.getString(1); //error

    while (data.moveToNext()) {
        if (data.getString(3).equals(mail)) {
            viewAll();
            return data.getString(1);
        }
    }
}

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

Теги:
android-cursor
android-database

3 ответа

0
Лучший ответ

Обычно это происходит, когда у вас нет данных в вашем Cursor и вы все еще пытаетесь получить доступ к данным. Это похоже на ArrayIndexOutOfBoundsException. До сих пор я не нашел ничего плохого в вашем запросе. Тем не менее, я думаю, что вы могли бы рассмотреть возможность добавления null проверки в вашем коде, которая предотвратит сбой вашего приложения. Особенно в while цикл, вам нужно поставить null отметку в состоянии.

И вам нужно использовать функцию moveToFirst там, где это необходимо.

public Cursor getAllDataTableStaffDatabase(String table_name) {
     this.open();
     Cursor result = this.mDb.rawQuery("SELECT * FROM " + table_name,null);
     return result;
}

public String findNameOfStaffBymail(String mail) {
    String sql = " SELECT  *  FROM " + DatabaseStaffHandler.STAFF_TABLE_NAME + " WHERE " + DatabaseStaffHandler.STAFF_MAIL + " = ? ";
    Cursor result = super.mDb.rawQuery(sql, new String[]{mail});
    Cursor data = super.getAllDataTableStaffDatabase(DatabaseStaffHandler.STAFF_TABLE_NAME);

    // Add a null checking here.
    if (result != null) {
        result.moveToFirst();
        String test = result.getString(1);
    }

    if(data != null) data.moveToFirst();

    while (data != null) {
        if (data.getString(3).equals(mail)) {
            viewAll();
            return data.getString(1);
        }

        data.moveToNext();
    }
}

Надеюсь, что это решит вашу проблему.

0

Спасибо за ваш ответ. Я нашел мою проблему благодаря тебе. Интересно, курсор не загружается в конце. Но это хорошая практика, чтобы проверить, если получено не является нулевым. Спасибо и хорошего дня

0

Merci de votre réponse. J'ai Trouvé Mon Procelème Grâce à vous. Je me demande si le Cursor s'ininialise pas à la fin. Mais c'est de Bonne pratique de vérifier si l'objet reçu n'est pas null. Je te remercie et bonne journée

Ещё вопросы

Сообщество Overcoder
Наверх
Меню