String.equals()总是返回false?

时间:2016-11-08 09:13:31

标签: android web-services

我正在尝试为Android应用程序创建一个登录页面。我的团队负责人已决定通过网络服务实现这一目标。

每当使用登录时,都会发送一个请求,其中包含3个可能的响应:

0: Wrong Password
20: Wrong username
otherwise: a UUID

我正在尝试验证webservice给出的结果,如下所示:

    String resultString = result.toString();
    if (resultString.equals("20")) {
        Toast.makeText(getBaseContext(), "Het ingevulde emailadres klopt niet!", Toast.LENGTH_LONG).show();
        return;
    } else if (resultString.equals("0")) {
        Toast.makeText(getBaseContext(), "Het ingevulde wachtwoord klopt niet!", Toast.LENGTH_LONG).show();
        return;
    } else {
        Toast.makeText(getBaseContext(), "Debug, klopt", Toast.LENGTH_LONG).show();
        return;
   }

对我来说似乎是基本代码。但是,此代码始终显示底部语句,因此它允许前两个传递为false。

出于调试目的,我还将resultString返回到我的控制台。 (删除了样本中的那一行)。在那里,我可以非常清楚地看到返回的结果实际上是20

这样简单的代码怎么能不按照我的意愿去做呢?

感谢。

4 个答案:

答案 0 :(得分:3)

代码似乎没问题......结果可能是空格? 尝试修剪resultString。 哪个是es 20,resultresultString

作为建议,通常最好做"".equals(object),否则,如果对象为null,则会抛出NullpointerExceptcion

此致

答案 1 :(得分:1)

响应并不是您要比较的字符串“0”和“20”。但回应是

0: Wrong Password
20: Wrong username
otherwise: a UUID

如果你想比较字符串那么它应该是

选项:1

String resultString = result.toString();
if (resultString.equals("20: Wrong username")) {
    // code
} else if (resultString.equals("0: Wrong Password")) {
    // code
} else {
    // code
}

选项:2

而不是eqauls,您应该使用contains

String resultString = result.toString();
if (resultString.contains("20")) {
    // code
} else if (resultString.contains("0")) {
    // code
} else {
    // code
}

答案 2 :(得分:0)

我同意以上所有内容 - 代码确实很好看。

尝试使用String.compareTo并查看int返回的值,以检查隐藏的差异。

另外,请尝试打印String.toCharArray + String.length以识别额外字符。

答案 3 :(得分:0)

如果您在不提取代码(0或20)的情况下从Web服务返回完整的字符串,那么您需要将'equals'替换为'contains'。