Я могу связывать команды Firestore get () вместе, используя Задачи, но я хотел бы сделать то же самое, используя onSnapshotListener Firestore, чтобы я мог связывать обновления в реальном времени вместе.
Вот пример кода, который я использую для объединения нескольких рекомендаций:
Query usersQuery = mDbase.collection("admins").document(adminID).collection("users");
Query booksQuery = mDbase.collection("books").whereEqualTo("groupID", groupID);
DocumentReference adminDoc = mDbase.collection("admins").document(adminID);
final Task<QuerySnapshot> getUsers = usersQuery.get();
final Task<QuerySnapshot> getBooks = booksQuery.get();
final Task<DocumentSnapshot> getAdmin = adminDoc.get();
Tasks.whenAllSuccess(getUsers, getBooks, getAdmin)
.addOnCompleteListener(new OnCompleteListener<List<Object>>() {
@Override
public void onComplete(@NonNull Task<List<Object>> task) {
List<User> users = getUsers.getResult().toObjects(User.class);
List<Book> books = getBooks.getResult().toObjects(Book.class);
Admin admin = getAdmin.getResult().toObject(Admin.class);
// ...
}
});
Моя цель заключается в следующем: «(I) хочу рассматривать три отдельных прослушивателя моментальных снимков как один« поток », и всякий раз, когда событие запускается в любом из них, (I) хочу получить обновление с последним значением для все трое." Цитата и пример кода предоставлены Сэмом Стерном на форуме Google Firestore.
Для моих целей мне кажется, что мне понадобятся обновления в реальном времени.
Вот мой вложенный код снимка:
firebaseGetUsers.readDataRTUpdate(new FirebaseGetUsers.FirestoreCallback() {
@Override
public void onCallback(final List<User> users) {
firebaseGetBooks.readDataRTUpdate(new FirebaseGetBooks.FirestoreCallback() {
@Override
public void onCallback(final List<Book> books) {
firebaseGetThisAdmin.readDataRTUpdate(new FirebaseGetThisAdmin.FirestoreCallback() {
@Override
public void onCallback(Admin admin) {
//processing all code here.
//books are empty!!
System.out.println("books: " + books.toString());
}
}
});
}
});
}
});
Спасибо.