В моем приложении я хотел бы выполнить 4 запроса к моей базе данных перед запуском фрагмента.
Каким-то образом я пытаюсь достичь:
Task t1 = Query1.get().onSuccesListener.... ;
Task t2 = Query2.get().onSuccesListener.... ;
Task t3 = Query3.get().onSuccesListener.... ;
Task t4 = Query4.get().onSuccesListener.... ;
Я все равно не смог найти их для Task
в Android, поэтому я попытался выполнить запрос внутри AsynTask
, а затем подождать, пока все AsyncTask
будут выполнены с помощью Latch onPostExecuted
.
Вот пример одного из моих AsyncTask
с запросом.
private class GetLandlordsRoomQuery extends AsyncTask<Void, Void, Void> {
ArrayList<RoomPosted> landlordsRooms = new ArrayList<>();
@Override
protected Void doInBackground(Void... voids) {
Query removeNonTenant = FirebaseFirestore.getInstance()
.collection(DataBasePath.ROOMS.getValue())
.whereEqualTo("landlordID", FirebaseAuth.getInstance().getUid());
removeNonTenant.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (DocumentSnapshot d : queryDocumentSnapshots) {
landlordsRooms.add(d.toObject(RoomPosted.class));
}
}
});
return null;
}
@Override
public void onPostExecute(Void result) {
mLandlordsRooms = landlordsRooms;
if (--asyncTaskLatch == 0){
startFragmentFromLandlord();
}
}
}
Проблема, с которой я здесь работаю, заключается в том, что onPostExecuted запускается до завершения запроса.
У меня может быть неправильный подход к решению этой проблемы с AsyncTask, но я не могу найти способ, используя Task
, чтобы дождаться завершения всех 4 задач, не создавая с ними вложенный onCompleteListener.
Есть какие-нибудь идеи, как я могу запустить в paralell все 4 потока и дождаться их завершения, прежде чем загрузить свой фрагмент?