Мой курсор сбивает мое приложение с ошибкой базы данных 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);
}
}
}
Я хотел бы получить имя значения, которое соответствует адресу электронной почты.
Обычно это происходит, когда у вас нет данных в вашем 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();
}
}
Надеюсь, что это решит вашу проблему.
Спасибо за ваш ответ. Я нашел мою проблему благодаря тебе. Интересно, курсор не загружается в конце. Но это хорошая практика, чтобы проверить, если получено не является нулевым. Спасибо и хорошего дня
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