при нажатии моей кнопки приложение остановится и ошибка в Android Java - PullRequest
0 голосов
/ 24 мая 2018

Я новичок в разработке для Android и получаю эти ошибки, когда нажимаю кнопку "getir".Это ошибка после работы.Как решить эту проблему

мой код:

public  void getir(View view)
{
cursor = myData.rawQuery("SELECT * FROM kolonVeri", null);
    int gunIx = cursor.getColumnIndex("gun");
    int vtarihIx = cursor.getColumnIndex("vTarih");
        cursor.moveToFirst();

        while (cursor != null)
        {
         System.out.println("VARDİYA: " + cursor.getString(gunIx));
         System.out.println("TARİH: " + cursor.getString(vtarihIx));
            cursor.moveToNext();
        }

}

журнал ошибок

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.hakannacar.vardiyam, PID: 19541
java.lang.IllegalStateException: Could not execute method for android:onClick
    om.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.lang.reflect.InvocationTargetException
   com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
 Caused by: android.database.CursorIndexOutOfBoundsException: Index 4 requested, with a size of 4

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Возвращенный курсор (например, как из rawQuery) не будет иметь значение null, проверка на null бесполезна и, как показано в этом случае, опасна.

Скорее вы должны проверить методы Cursor move???, чтобы увидеть, возвращают ли они true.

Фактическая проблема заключается в том, что вы пытаетесь получить данные для 5-й строки (индекс 4), когда имеется только 4 строки (размер), поскольку проверка для != null всегда будет истинной, поэтомуцикл продолжается после 4-й строки.

Таким образом, ваш код может быть: -

public  void getir(View view)
{
    cursor = myData.rawQuery("SELECT * FROM kolonVeri", null);
    int gunIx = cursor.getColumnIndex("gun");
    int vtarihIx = cursor.getColumnIndex("vTarih");
    while (cursor.moveToNext()) {
         System.out.println("VARDİYA: " + cursor.getString(gunIx));
         System.out.println("TARİH: " + cursor.getString(vtarihIx));
    }
}
0 голосов
/ 24 мая 2018

Вы должны проверить, есть ли у курсора больше элементов, замените цикл while на этот

if (cursor.moveToFirst()) {
    do {
       System.out.println("VARDİYA: " + cursor.getString(gunIx));
       System.out.println("TARİH: " + cursor.getString(vtarihIx));            
    } while (cursor.moveToNext());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...