如何将变量从AsyncTask类返回到片段

时间:2015-09-18 21:41:19

标签: android class android-fragments android-asynctask code-reuse

我创建了一个多个片段,这些片段都需要来自服务器的数据。所以我创建了一个可重用的AsyncTask。它通过套接字连接到服务器,传输一些数据包并最终收到响应。我怎样才能动态地'从result返回onPostExecute(a.k.a响应)?我创建了一个流程图来更好地解释自己。

How to return an variable from a AsyncTask class to an fragment flowchat

2 个答案:

答案 0 :(得分:2)

AsyncTask只需在Fragment中提供的onPostExecute中调用回调,或AsyncTask可以是给定片段的嵌套类。

例如

public class MyFragment extends Fragment {

    void onResult(Result result) {...}

    private class MyTask extends AsyncTask<String, Void, Result> {
        doInBackground(...) {}
        onPostExecute(Result result)  {
            onResult(result);
        }
    }
}

这样做的缺点就是在完成任务之前保留片段的引用。如果你的任务总是最终终止而且没有被任何静态上下文引用,那么它很好,因为最终会收集内存。

答案 1 :(得分:0)

您可以使用侦听器,该侦听器使用异步任务在每个片段中实现。在界面中使用所需的结果参数定义方法。 您可以将引用传递给异步任务,并将其存储在weak reference