【问题标题】:cursor is crashing with CursorIndexOutOfBoundsException游标因 CursorIndexOutOfBoundsException 而崩溃
【发布时间】:2019-09-15 09:38:55
【问题描述】:

我的光标正在使我的应用程序因 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);
        }
    }
}

我想检索与电子邮件地址对应的值名称。

【问题讨论】:

  • 如果你能用英文编辑你的帖子,它会有所帮助。
  • 请检查我的回答,如果可行,请告诉我。

标签: java android android-cursor android-database


【解决方案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();
    }
}

希望能解决您的问题。

【讨论】:

    【解决方案2】:

    感谢您的回复。多亏了你,我找到了我的问题。我想知道光标是否最后没有启动。但最好检查收到的是否不为空。谢谢你,祝你有美好的一天

    【讨论】:

      猜你喜欢
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2013-03-09
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多