游标因 CursorIndexOutOfBoundsException 而崩溃
cursor is crashing with CursorIndexOutOfBoundsException
我的光标因 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();
}
}
希望能解决您的问题。
感谢您的回复。多亏了你,我找到了我的问题。我想知道光标是否最后没有启动。但最好检查收到的是否不为空。谢谢你,祝你有美好的一天
我的光标因 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();
}
}
希望能解决您的问题。
感谢您的回复。多亏了你,我找到了我的问题。我想知道光标是否最后没有启动。但最好检查收到的是否不为空。谢谢你,祝你有美好的一天