Я пытаюсь организовать код приложения, разделяющий классы AsyncTask из Activity или Fragments. Серфинг этого форума я узнал о решении "интерфейс и слушателя":Возврат нескольких данных из AsyncTask
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
}
}
UPDATE DataHelper.java
public class DataHelper {
private AsyncTaskCompleteListener<Object> listener;
public DataHelper(AsyncTaskCompleteListener<Obejct> listener) {
this.listener = listener;
}
// Multiple AsyncTask are defined here...
}
Ну, мне нравится эта картина так много, но: что если в деятельности (или его фрагмент) У меня есть несколько запросов , с различным типом результатов (один объект, массив, список) и различные бизнес-логики для их управления? Я не могу справиться с этим, используя один обратный вызов. Есть идеи? Должен ли я добавить несколько обратных вызовов внутри интерфейса? Я действительно застрял в этом. У меня есть один файл с именем DataHelper с несколькими AsyncTask внутри (что-то вроде веб-геттеров). Естественно, я могу отказаться от этого подхода, если вы предложите любую другую альтернативу.
Можете ли вы опубликовать код, в котором вы инициируете 'слушателя'? –
См. Обновление UPDATE.Я передаю его конструктору DataHelper, удобному классу для цели извлечения данных. – Jumpa