Я пытаюсь получить данные из Firestore, где поле "simpleDate" равно массиву строк (дат).
Итак, ArrayList<String> uniqueDates = new ArrayList<String>();
содержит несколько строк:
[19/03/2020, 18/03/2020, 14/03/2020]
....
Я хочу выполнить итерацию по каждому запросу, получить данные для этой уникальной строки, затем вернуться к началу и создать новый запрос со следующей строкой. Однако я испытываю затруднения, заставляя его ждать, пока он не завершит и извлечет данные, прежде чем перейти к следующей итерации. Вот что у меня пока есть:
public void GetDailyCal() {
for (int i = 0; i < uniqueDates.size(); i++) {
sum = 0;
fdb.collection("users").document(username).collection("Diet").whereEqualTo("simpleDate", uniqueDates.get(i))
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot snapshot : task.getResult()) {
List<Long> TotalCalories = new ArrayList<>();
TotalCalories.add(snapshot.getLong("foodCalories"));
for (int i = 0; i < TotalCalories.size(); i++) {
sum += TotalCalories.get(i);
}
}
}
else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
//finalCalories.add(Long.valueOf(sum));
//i++;
}
}
В настоящее время это просто итерирует i ++ до достижения метода uniqueDates.size () и затем начинает запрос вместо выполнения запроса, а затем i ++ после его завершения. Я безуспешно пытался поместить i ++ в разные позиции.
Как именно я могу сделать это, чтобы выполнить первый запрос, используя первый элемент в массиве, завершить поиск данных, а затем i ++, чтобы выполнить следующий запрос?
Спасибо.