我正在尝试为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
。
这样简单的代码怎么能不按照我的意愿去做呢?
感谢。
答案 0 :(得分:3)
代码似乎没问题......结果可能是空格?
尝试修剪resultString
。
哪个是es 20,result
或resultString
?
作为建议,通常最好做"".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'。