基于AsyncTask结果怎么做或什么都不做?

时间:2016-07-25 14:52:33

标签: android android-asynctask

专家,

我的目标很简单,输入一个地址,点击一个按钮来测试一个URL,如果没有得到预期的结果,一个Toast信息然后什么都不做。如果得到期望结果,继续该程序。

由于我不能在UI线程中使用URL,我使用了AsyncTask,问题是:虽然我知道AsyncTak的结果,但是如何通知活动做什么或什么也不做? 我想要的是OnClickListener中的一个语句,如下所示:

if (result is not expected) return; else continue do things.

我不能在onPostExecute中写上面的语句,它将返回onPostExecute(),而不是onClickLIstener()。

另一个是:即使我可以将结果传递给activity(即onClickLIstener()),当结果到达时,UI线程可能已经运行了一些其他代码,但是在知道结果之前它们不应该。

简而言之,我需要URL结果来决定如何运行剩余代码,因此不能使用异步任务,我该怎么办?

感谢。

以下是示例代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    btnConfirm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        new XXX().execute(code);
 });

}


 class XXX extends AsyncTask<String, Void, String> {
    protected String doInBackground(String... strArr) {
        XXXXX;
    }

    protected void onPostExecute(String result) {
        XXXXX;
    }
}

2 个答案:

答案 0 :(得分:1)

这应该很容易。试试这种方法:

由于您已将AsyncTask作为活动中的内部类,因此您可以轻松地在onPostExecute()中返回结果,然后检查请求是否成功。

现在,这是最后一部分:在您的活动中创建一个方法,如下所示:

private void executeOnAsyncSuccess(){
   //place the code here you want to run
}

现在您可以轻松地在onPostExecute()内拨打电话了!

您也可以使用Events执行此操作,但这种方法应该可行!

我希望这有帮助!

答案 1 :(得分:0)

我刚刚了解到可能Callable是一个好方法,使用它的V get()。