我是 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
最佳答案
返回的 Cursor(例如,来自 rawQuery)不会为 null,对 null 的检查是无用的,并且如本例所示是危险的。
相反,您应该检查 Cursor move???
方法以查看它们是否返回 true。
实际问题是,当只有 4 行(大小)时,您最终会尝试检索第 5 行(索引 4)的数据,因为 != null
的检查将始终为true,因此循环将继续到第 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));
}
}
关于java - 当单击我的按钮时,应用程序停止并在 android java 中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50498833/