AsyncTask クラスを Activity または Fragments から分離するアプリ コードを整理しようとしています。このフォーラムをサーフィンして、「インターフェースとリスナー」ソリューションについて学びました。
インターフェイス.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);
}
アクティビティ.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...
}
このパターンはとても気に入っていますが、アクティビティ (またはフラグメント) 内に複数の request があり、結果の型 (単一オブジェクト、配列、リスト) が異なり、それらを管理するためのビジネス ロジックが異なる場合はどうでしょうか。 単一の callback を使用してそれを処理することはできません。何か案は?インターフェイス内に複数のコールバックを追加する必要がありますか? 私は本当にこれで立ち往生しています。内部に複数の AsyncTask (Web ゲッターのようなもの) を含む DataHelper という単一のファイルがあります。当然、他の代替案を提案していただければ、このアプローチをあきらめることができます。