【问题标题】:How to know when multi SnapshotListener finish?如何知道多 SnapshotListener 何时完成?
【发布时间】:2020-02-13 20:02:05
【问题描述】:

我如何知道不同集合的多个SnapshotListener 已在哪里完成?

举个例子,尝试从用户集合中检索用户,从团队集合中检索团队,从教练集合中检索教练。

我想让活动“活跃”只有当我得到我正在寻找的所有数据时。

例如:

  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
                    }

我如何确保只有当我得到所有三个时我才会使我的活动“启用”?

【问题讨论】:

  • 我可以在我的视图模型中创建一个三个布尔值来表示数据是否为每个快照准备好,并且在每个完整的侦听器上更新值并调用一个同步的方法来查找三个布尔值,如果都是真的,更新活动。但是有没有更“优雅”的方式来做到这一点?

标签: java android firebase google-cloud-firestore


【解决方案1】:

您无法知道使用 addSnapshotListener() 从数据库中获取数据何时完成,因为 Cloud Firestore 是一个实时数据库,并且可能永远无法完成获取数据。这就是为什么称为实时数据库的原因,因为在任何时候都可以更改数据库,可以添加或删除项目。

部分了解您是否拥有来自特定查询的所有数据的唯一方法是对该查询执行get() 调用。即便如此,在调用该侦听器后数据可能会发生变化,因此您真正拥有的只是某个特定时刻的snapshot

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

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

只有当您在数据库中写入更新数据时,您才能使用CompletionListener,并且当 Firebase 服务器确认操作时您会收到通知但读取数据时不能使用该接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2011-04-05
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多