Чтобы достичь этого без использования каких-либо шаблонов или других библиотек, вы можете пометить запрос как выполненный, если он ответил, и вызвать метод, в каждом из которых вы хотите выполнить, если все запросы завершены.В этом методе вам просто нужно проверить, все ли запросы выполнены.
Пример:
isRequest1Finished = false;
isRequest2Finished = false;
response1 = null;
response2 = null;
volleyRequest1(new Response.Listener<Something>() {
@Override
public void onResponse(Something response) {
isRequest1Finished = true;
response1 = response;
doSomething();
}
})
volleyRequest2(new Response.Listener<Something>() {
@Override
public void onResponse(Something response) {
isRequest2Finished = true;
response2 = response;
doSomething();
}
})
//....do on all of your requests
, а в вашем doSomething()
методе:
void doSomething() {
if (isRequest1Finished && isRequest2Finished) {
// do something with the response1, response2, etc....
}
}
Но я предлагаю использовать RxJava, где вы можете применить оператор zip
, в котором он объединяет все ваши асинхронные ответы в один результат:
Пример:
Observable request1 = getRequest1();
Observable request2 = getRequest2();
Observable.zip(request1, request2,
new BiFunction<Something, Something, Pair<Something, Something>() {
@Override
public Pair<Something, Something> apply(Something response1, Something response2) {
return new Pair(response1, response2); // you can create a custom object to handle all of the responses
}
})
.map( // do something with your responses )