首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游标正在使用CursorIndexOutOfBoundsException崩溃

问游标正在使用CursorIndexOutOfBoundsException崩溃
EN

Stack Overflow用户
提问于 2019-04-26 05:41:20
回答 2查看 38关注 0票数 1

我的光标正在使用android数据库错误崩溃我的应用程序。

代码语言:javascript
复制
CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

我做了另一个优化少得多的滑块,它扫描我的数据库,我找到了好的价值。

代码语言:javascript
复制
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);
        }
    }
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-26 11:16:19

当您的Cursor中没有数据,而您仍在尝试访问数据时,通常会发生这种情况。它类似于ArrayIndexOutOfBoundsException。到目前为止,我没有发现您的查询有任何问题。然而,我认为你可以考虑在你的代码中添加null检查,这将防止你的应用程序崩溃。特别是在while循环中,您需要在条件中加入null检查。

并且您需要在必要的地方使用moveToFirst函数。

代码语言:javascript
复制
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();
    }
}

希望这能解决你的问题。

票数 0
EN

Stack Overflow用户

发布于 2019-04-30 18:10:09

感谢您的回复。多亏了你我找到了自己的问题。我想知道光标是否在末尾不能启动。但检查接收是否不为空是一种好的做法。谢谢你,祝你今天愉快

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55858025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档