3

由于某种原因,当找不到我输入的用户名时,应用程序崩溃了。但是,当找到用户名时,它似乎运行完美。我什至检查返回的游标是否== 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;
}
4

5 回答 5

3

您的 Cursor 对象可能不为空,但其结果集的大小为 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;
    }
}
于 2012-05-04T02:14:27.860 回答
2

首先,条件应该是:

if (c != null && c.getCount() > 0)

二、可以重构

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

用这个代替:

authenticated = password.equals(c.getString(1));
于 2012-05-04T02:19:50.727 回答
1

改变:

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

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

c != null如果光标的大小大于 0 ,则返回 true 。

于 2012-05-04T02:23:28.650 回答
0
if (cursor != null && cursor.getCount() > 0) {
if (c.moveToFirst()) {
          String passwordAttachedToUsername = c.getString(1);
          if(passwordAttachedToUsername.equals(password)) {
           authenticated = true;
    }}
                    // your logic goes here
                } else {
                    Toast.makeText(getApplicationContext(), "No Record Found", 1000).show();
                }
于 2014-03-01T07:38:53.833 回答
0

query命令将始终返回一个游标,因此您对 null 的测试将始终失败。您需要检查游标包含使用的计数cursor.getCount()

于 2012-05-04T02:18:25.830 回答