Java 如何知道多快照侦听器何时完成?

Java 如何知道多快照侦听器何时完成?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我如何知道不同集合的许多快照侦听器已在何处完成 以尝试从用户集合中检索用户、从团队集合中检索团队以及从coach集合中检索coach为例 只有当我获得了我要查找的所有数据时,我才想使活动“激活” 例如: firebaseFirestore.collectionGroup("users").whereEqualTo("user_id", currentUser.getId()).addSnapshotListener(this, new EventListener<QuerySnapsh

我如何知道不同集合的许多快照侦听器已在何处完成

以尝试从用户集合中检索用户、从团队集合中检索团队以及从coach集合中检索coach为例

只有当我获得了我要查找的所有数据时,我才想使活动“激活”

例如:

  firebaseFirestore.collectionGroup("users").whereEqualTo("user_id", currentUser.getId()).addSnapshotListener(this, new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                   // getting the user
                    }

  firebaseFirestore.collectionGroup("teams").whereEqualTo("team_id", currentTeam.getId()).addSnapshotListener(this, new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                   // getting the team
                    }


  firebaseFirestore.collectionGroup("coachs").whereEqualTo("coach_id", currentCoach.getId()).addSnapshotListener(this, new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                   // getting the coach
                    }
firebaseFirestore.collectionGroup(“用户”).whereEqualTo(“用户id”,currentUser.getId()).addSnapshotListener(这是新的EventListener()){
@凌驾
public void OneEvent(@Nullable QuerySnapshot queryDocumentSnapshots,@Nullable FirebaseFirestoreException e){
//获取用户
}
firebaseFirestore.collectionGroup(“团队”).whereEqualTo(“团队id”,currentTeam.getId()).addSnapshotListener(这是新的EventListener()){
@凌驾
public void OneEvent(@Nullable QuerySnapshot queryDocumentSnapshots,@Nullable FirebaseFirestoreException e){
//获得团队
}
firebaseFirestore.collectionGroup(“coachs”).whereEqualTo(“coach\u id”,currentCoach.getId()).addSnapshotListener(这是新的EventListener()){
@凌驾
public void OneEvent(@Nullable QuerySnapshot queryDocumentSnapshots,@Nullable FirebaseFirestoreException e){
//找教练
}

我如何确保只有当我获得了所有这三项后,我才能使我的活动“启用”?

您无法知道何时使用
addSnapshotListener()从数据库获取数据
已完成,因为Cloud Firestore是一个实时数据库,获取数据可能永远不会完成。这就是为什么命名为实时数据库的原因,因为数据库随时都可以更改,项目可以添加或删除

部分了解您是否拥有特定查询中的所有数据的唯一方法是对该查询执行
get()
调用。即使如此,调用该侦听器后,数据可能会更改,因此您真正拥有的只是特定时刻的
快照

在您的特定情况下,您可以在每次查询中使用
get()
,并将其保存在任务对象中。要知道所有任务何时完成,请使用我在以下帖子中的答案:

但是不应该使用两个查询,而应该使用三个查询


只有当您写入数据库中的数据或更新数据库中的数据时,才可以使用
CompletionListener
,并且当Firebase服务器确认操作时,会通知您,但您在读取数据时不能使用此界面。

我可以在我的viewmodel中创建三个布尔值,表示ta为每个快照做好了准备,在每个完整的listiner上更新值并调用一个查找三个布尔值的同步方法,如果都是真的,则更新活动。但是还有更“优雅”的方法吗?