У меня проблема при получении данных из Firebase Firestore. Я хочу получить несколько документов из моей коллекции «Сообщения», и это нормально работает. Но чтобы получить мои пользовательские документы из моей коллекции «Пользователи», мне нужно запустить несколько задач (Задача), которые ВСЕ должны быть выполнены, прежде чем я захочу вызвать свою функцию обратного вызова, и я не могу понять, как это сделать. Есть ли способ сделать это с помощью обратного вызова? Я пытался решить эту проблему с помощью продолжения, но у меня возникли трудности.
Заранее спасибо. Вот простой код, который я написал, чтобы вы могли немного лучше понять проблему.
public void getPosts(final postCallback callback) {
final FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference postsRef = db.collection("Posts");
Query postsQuery = postsRef.orderBy("createTime", Query.Direction.DESCENDING).limit(20);
// Starting the post documents
Task<QuerySnapshot> task = postsQuery.get();
task.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
QuerySnapshot querySnapshot = task.getResult();
List<DocumentSnapshot> docsList = querySnapshot.getDocuments();
for(DocumentSnapshot docSnap : docsList){
String userID = docSnap.getString("originalPoster");
// getting user documents
Task<DocumentSnapshot> userTask = db.collection("Users").document(userID).get();
userTask.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
DocumentSnapshot userDoc = task.getResult();
String userID = userDoc.getId();
String firstName = userDoc.getString("first_name");
String surname = userDoc.getString("surname");
User userObject = new User(firstName, userID, surname);
// cant call my callback right here otherwise its called for every
// completed user fetch
}
});
// cant call my callback right here since its too early
}
}else if(task.isCanceled()){
System.out.println("Fetch failed!");
}
}
});
}