当前位置:首页 > 数据库 > SQlite

java – Android SQLite CursorIndexOutOfBounds

由于某些原因,当找不到我输入的用户名时,应用程序崩溃.但是当找到用户名时,它似乎运行得很完美.我甚至检查一下返回的游标是否== null.继承人的代码

    public boolean isUserAuthenticated(String username, String password) {
    // TODO Auto-generated method stub
    boolean authenticated = false;
    String[] columns = new String[] {LOGIN_USERNAME, LOGIN_PASSWORD};
    String sqlUsername = """ + username + """;
    Cursor c = ourDatabase.query(LOGIN_TABLE, columns, LOGIN_USERNAME + "="+ sqlUsername, null, null, null, null);
    if (c != null) {
        c.moveToFirst();
        String passwordAttachedToUsername = c.getString(1);
        if(passwordAttachedToUsername.equals(password)) {
            authenticated = true;
        }
    }

    return authenticated;
}

解决方法:

您的Cursor对象可能不为null,但其结果集的大小为0.而不是:

if (c != null) {
    ...
}

尝试:

if (c.getCount() > 0) {
    ...
}

另外,由于提到的@mu太短,你可以在条件中使用c.moveToFirst()的返回值:

if (c.moveToFirst()) {
    String passwordAttachedToUsername = c.getString(1);
    if (passwordAttachedToUsername.equals(password)) {
        authenticated = true;
    }
}

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!