【发布时间】:2015-08-24 12:53:42
【问题描述】:
我有一个问题,我无法检查 AsyncTask 结果的值以启动新的活动,如果结果是可取的。
这是我的 onPostExecute 方法:
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Toast.makeText(LoginActivity.this, s, Toast.LENGTH_SHORT).show();
}
它从 php 文件中读取字符串值,它有两个可能的值,“您已成功登录”或“电子邮件或密码不正确”。一切正常,直到我想检查烤消息是什么,因为如果登录成功,我需要开始一个新活动。
这就是我尝试这样做的方式:
public void onClick(View v) {
AttemptLogin login = new AttemptLogin();
try {
String res = login.execute("http://10.0.2.2/loginApp.php").get();
if (res.equals("You are successfully logged in"))
startActivity(new Intent(LoginActivity.this,ConnectActivity.class));
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
我完全糊涂了,因为当我敬酒 res 时,我得到了想要的消息,所以问题出在这行,if (res.equals("You are successfully logged in"))。该应用程序的行为就像这条线根本不存在。
我也尝试使用 if(AsyncTask.getStatus() == FINISHED) 然后检查 AsyncTask 结果,但没有帮助。
我真的不知道发生了什么,有人可以帮我解决这个问题吗?
【问题讨论】:
-
永远不会!将
.get()与异步任务一起使用,这会阻塞 ui 线程。如果您想从异步任务中获取某些内容,请使用onPostExecute或创建一个在异步任务完成时触发的回调 -
在
onPostExecute中移动if (res.equals("You are successfully logged in"))条件并删除get()方法。可能由于字符串中的额外空间而出现问题,因此请尝试使用contains而不是equals -
Contains 完成了这项工作,我删除了 onPostExecute 中的条件,正如你和 Pier 所说的那样。非常感谢。我不敢相信我花了这么多时间试图解决这个问题,而且我没有想出使用包含而不是等于的想法。这很令人沮丧,但是好的,我在 adnroid 编程方面仍然很陌生,希望我会改进。再次感谢