【问题标题】:not able to check AsyncTask result无法检查 AsyncTask 结果
【发布时间】: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 编程方面仍然很陌生,希望我会改进。再次感谢

标签: android android-asynctask


【解决方案1】:

AsyncTask 具有 OnPostExecute 和 OnPreExecute 方法。 它们都可以像调用普通方法一样调用项、变量和方法。

因此,在您的 onPostExecute 中,您可以轻松检查结果并使用以下命令开始您的活动:

@Override
    protected void onPostExecute(String s) {
        super.onPostExecute();
        try {

            if (s.equals("You are successfully logged in")){
                Intent i = new Intent(LoginActivity.this,ConnectActivity.class);
                startActivity(i); 
            }                                                                              
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        Toast.makeText(LoginActivity.this, s, Toast.LENGTH_SHORT).show();
    }

【讨论】:

  • 感谢您的回答,我将条件移至 onPostExecute 并使用 contains 而不是 equals 工作正常
猜你喜欢
  • 1970-01-01
  • 2019-10-13
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2012-11-05
  • 2014-08-20
  • 1970-01-01
相关资源
最近更新 更多