java - 为什么这个 .equals() 不起作用?

标签 java android eclipse string equals

我正在 Eclipse (Android) 中工作。在以下 block 中,EmployeeInt 和 RestaurantInt 是数据类型,query() 打开与数据库的连接并解析结果。当我打印查询结果时,我得到相同的字符串,但 boolean 值仍然为 false。我尝试过修剪琴弦,但没有帮助。

public boolean verifyEmployee(String email, String password) {
    ArrayList<EmployeeInt> employeeEmailID = query("SELECT employeeID FROM employees WHERE emailAddress = \'"+email+"\'");
    ArrayList<EmployeeInt> employeePasswordID = query("SELECT employeeID FROM employees WHERE password = \'"+password+"\'");
    String stringEmployeeEmailID = employeeEmailID.toString();
    String stringEmployeePasswordID = employeePasswordID.toString();

    if(stringEmployeeEmailID.equals(stringEmployeePasswordID)) {
        return true;
    } else {
        return false;
    }
}

执行上面的代码给我错误,而执行下面的 block (几乎相同)给我正确的结果。

public boolean verifyRestaurant(String email, String password) {
    ArrayList<RestaurantInt> restaurantEmailID = query("SELECT restaurantID FROM restaurants WHERE emailAddress = \'"+email+"\'");
    ArrayList<RestaurantInt> restaurantPasswordID = query("SELECT restaurantID FROM restaurants WHERE password = \'"+password+"\'");
    String stringRestaurantEmailID = restaurantEmailID.toString();
    String stringRestaurantPasswordID = restaurantPasswordID.toString();

    if(stringRestaurantEmailID.equals(stringRestaurantPasswordID)) {
        return true;
    } else {
        return false;
    }
}

谁能指出我的错误吗?

编辑

我把它改成了这个并且它起作用了:

public boolean verifyEmployee(String email, String password) {
    ArrayList<EmployeeInt> employeeEmailID = query("SELECT * FROM employees WHERE emailAddress = \'"+email+"\'");
    ArrayList<EmployeeInt> employeePasswordID = query("SELECT * FROM employees WHERE password = \'"+password+"\'");
    int intEmployeeEmailID = employeeEmailID.get(0).getID();
    int intEmployeePasswordID = employeePasswordID.get(0).getID();

    if(intEmployeeEmailID==intEmployeePasswordID) {
        return true;
    } else {
        return false;
    }
}

我知道我也可以使用返回(条件),但我想在登录失败时添加一些消息,例如:

System.err.println("email address and password do not correspond");

我不是在制作一个要发布的应用程序,它只是为了一项作业。感谢您的帮助!

最佳答案

您正在对 ArrayList 调用 toString()。两个不同的 ArrayList 对象将返回两个不同的 toString() 字符串。您可能想获取 ArrayList 的第一个元素,并将其转换为字符串。

示例

EmployeeInt 是您的自定义对象。在我的示例中,我假设它有一些可以使用 getID() 检索的 int 字段。

ArrayList<EmployeeInt> idList = query("SELECT employeeID FROM employees WHERE emailAddress = \'"+email+"\'");
int ID = idList.get(0).getID();
stringEmployeeEmailID = String.valueOf(ID);

这可能比代码更容易阅读:

  • query() 返回一个 ArrayList
  • 我们提取 ArrayList 的第一个元素 - 这是您遗漏的部分
  • 我们获取该元素的 ID
  • 我们将其转换为字符串

关于java - 为什么这个 .equals() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22201358/

相关文章:

java - AsyncTask 中向 REST 服务发出 POST 请求

java - 不能在静态上下文中使用 'this'

java - ActivityThread 从 ArrayList 中删除某些内容后导致程序崩溃

java - SWTBot 测试读取欢迎页面文本

java - Spring Boot 应用程序无法使用 JspTagLib 和 Freemarker 找到 security.tld

java - 如何获取 JTextField 的真实 x 和 y 坐标

android - Eclipse 如何检测我的 Samsung Galaxy SII 以使用 Debian 作为操作系统进行 USB 调试?

Eclipse 控制台仅在程序完成后写入输出

java - Spring自定义 validator 注入(inject)NullPointerException

java - 如何从android中的URL下载文件的一部分?