我真的被困在这里,它对我没有任何意义。这里发生了什么:我有一个AsyncTask将数据发送到服务器并检索String响应。字符串响应可以是两件事:它可以是一条消息,告诉用户如果输入的凭据是正确的,他/她已登录,或者它可以是" FALSE"用于向用户显示通知toast并将他/她带回主活动以重试登录的字符串。
以下是代码段:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String cr = "Placeholder";
Credential cred = new Credential();
try { cr = cred.execute().get(); }
catch (InterruptedException e) { e.printStackTrace(); }
catch (ExecutionException e) { e.printStackTrace(); }
//tv.setText(cr);
if (cr == "FALSE") {
Log.d("Checking in false", cr);
Toast.makeText(Credentials.this, "Cannot log in: wrong username or password", Toast.LENGTH_LONG).show();
startActivity(new Intent(Credentials.this, MainActivity.class));
} else if (cr != "FALSE") {
Log.d("Checking in true", cr);
Intent intent = new Intent(Credentials.this, ProfileActivity.class);
intent.putExtra(INTENT_DATA, cr);
startActivity(intent);
}
}
});
通过使用Log.d()
静态方法并查看LogCat,如果凭据错误,我确定返回的值确实为FALSE
(同样,它不是一个布尔值,只是所有Caps中的String)。有趣的是,执行的代码是"否则如果"我发布的片段的一部分,但它实际上记录了返回的字符串值为FALSE
!这意味着(至少对我而言)它应该执行第一个"如果& #34;条件(即if (cr == "FALSE") { }
)。但不,它继续执行"否则如果"一部分。
有什么想法吗?
答案 0 :(得分:4)
使用equals进行字符串比较。
即:
WRONG:
if (cr == "FALSE") {
正确:
if (cr.equals("FALSE")) {
答案 1 :(得分:0)
使用
if (cr.contentEquals("false") {
//your code
} else {
//your code
}