Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将变量从AsyncTask类返回到片段_Android_Class_Android Fragments_Android Asynctask_Code Reuse - Fatal编程技术网

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

Android 如何将变量从AsyncTask类返回到片段,android,class,android-fragments,android-asynctask,code-reuse,Android,Class,Android Fragments,Android Asynctask,Code Reuse,我创建了多个片段,这些片段都需要来自服务器的数据。因此,我创建了一个可重用的AsyncTask。它通过套接字连接到服务器,传输一些数据包并最终接收响应。如何从onPostExecute“动态”返回结果(又称响应)?我创建了一个流程图来更好地解释我自己 异步任务可以简单地调用onPostExecute中提供的片段中的回调,或者异步任务可以是给定片段的嵌套类 比如说 public class MyFragment extends Fragment { void onResult(Resul

我创建了多个片段,这些片段都需要来自服务器的数据。因此,我创建了一个可重用的
AsyncTask
。它通过套接字连接到服务器,传输一些数据包并最终接收响应。如何从
onPostExecute
“动态”返回
结果(又称响应)?我创建了一个流程图来更好地解释我自己


异步任务可以简单地调用
onPostExecute
中提供的
片段
中的回调,或者
异步任务
可以是给定片段的嵌套类

比如说

public class MyFragment extends Fragment {

    void onResult(Result result) {...}

    private class MyTask extends AsyncTask<String, Void, Result> {
        doInBackground(...) {}
        onPostExecute(Result result)  {
            onResult(result);
        }
    }
}
公共类MyFragment扩展了片段{
void onResult(结果){…}
私有类MyTask扩展了AsyncTask{
doInBackground(…){}
onPostExecute(结果){
onResult(result);
}
}
}

这样做的缺点是在任务完成之前保留片段的引用。如果您的任务总是最终终止,并且没有被任何静态上下文引用,那么这没关系,因为内存最终将被收集。

您可以使用侦听器,它使用异步任务在每个片段中实现。使用所需的结果参数在接口中定义方法。
您可以传递对异步任务的引用,并将其存储在扩展您的
AsyncTask
中,然后向其传递侦听器。一旦onPostExecute完成,则调用该侦听器。或者使用事件总线。