Retrofit を介して IntentService 内で複数の応答を取得するために call execute をループできないのはなぜですか?
私のコードを見てください:
public class UpdateAgendaService extends IntentService {
public static final int STATUS_RUNNING = 0;
public static final int STATUS_FINISHED = 1;
public static final int STATUS_ERROR = 2;
private Agenda agenda;
public UpdateAgendaService() {
super(UpdateAgendaService.class.getName());
}
@Override
protected void onHandleIntent(Intent intent) {
final ResultReceiver receiver = intent.getParcelableExtra("receiver");
String[] dateWeek = intent.getStringArrayExtra("dateWeek");
if (dateWeek != null) {
receiver.send(STATUS_RUNNING, Bundle.EMPTY);
Bundle bundle = new Bundle();
try {
//Why is this not possible?
List<Agenda> agendaList = getAgendaList(dateWeek);
receiver.send(STATUS_FINISHED, bundle);
}
} catch (Exception e) {
/* Sending error message back to activity */
bundle.putString(Intent.EXTRA_TEXT, e.toString());
receiver.send(STATUS_ERROR, bundle);
}
}
Log.d(Utilities.TAG, "Service Stopping!");
this.stopSelf();
}
private List<Agenda> getAgendaList(String[] upcomingWeekdates){
List<Agenda> agendaList = null;
for (int i = 0; i < upcomingWeekdates.length; i++) {
String weekDay = upcomingWeekdates[i];
agendaList.add(getAgenda(weekDay));
}
return agendaList;
}
private Agenda getAgenda(String date) {
Agenda agenda = null;
ApiService apiService = new QardioApi().getApiService();
Call<Agenda> call = apiService.getAgenda(date);
try {
agenda = call.execute().body();
} catch (IOException e) {
e.printStackTrace();
}
return agenda;
}
}
そのため、URL を持つ API があるという状況です。http//:myapi.com/[date]
後付けで呼び出すと、その特定の日の議題 (イベント) の JSON 応答が得られます。私がやりたいのは、次の週の議題(イベント)を表示することです。そのため、次の週の日付の文字列配列を指定してループを介して実行しました。Eventbrite アプリのようなものを想像してみてください。
私が間違っていることは何ですか?JobQueue/Eventbus 経由でこれを行う必要があることをどこかで読みましたが、それを行う必要がありますか? しかし、これ以上サードパーティのライブラリを使用したくないので、少し躊躇しています。ただし、それが最後のシナリオである場合は、おそらくそれを使用します。