【发布时间】:2013-09-15 09:59:13
【问题描述】:
我正在尝试组织我的应用程序代码,将 AsyncTask 类与 Activity 或 Fragments 分开。 通过浏览这个论坛,我了解到“接口和监听器”解决方案:
Interface.java
public interface TaskCompleteListener<T> {
public void onTaskComplete(T result);
}
AsyncTask.java
[...]
@Override
protected void onPostExecute(String JSONResponse) {
// using Gson library I convert JSONResponse string to POJO objects...
listener.onTaskComplete(result);
}
Activity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// start AsyncTask...
}
// Inner class implementing interface
public class LoadTaskCompleteListener implements TaskCompleteListener<Object> {
@Override
public void onTaskComplete(Object result) {
updateUI(result);
}
}
public void updateUI(Object result) {
// here you can manage UI updating, using result object
}
}
更新 DataHelper.java
public class DataHelper {
private AsyncTaskCompleteListener<Object> listener;
public DataHelper(AsyncTaskCompleteListener<Obejct> listener) {
this.listener = listener;
}
// Multiple AsyncTask are defined here...
}
好吧,我非常喜欢这种模式,但是:如果内部活动(或片段) 我有多个请求,具有不同类型的结果(单个对象、数组、列表) 以及管理它们的不同业务逻辑? 我无法使用单个回调来处理这个问题。有任何想法吗?我应该添加多个 接口内部的回调?我真的坚持这一点。 我有一个名为 DataHelper 的文件,里面有多个 AsyncTask(类似于 web getter)。 如果您提出任何其他选择,我自然可以放弃这种方法。
【问题讨论】:
-
你能在你发起
listener的地方发布代码吗? -
查看更新编辑。我将它传递给 DataHelper 构造函数,这是一个用于数据检索的便利类。
标签: java android android-fragments android-asynctask android-activity