- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我如何知道不同集合的许多 SnapshotListener
已完成?
举一个尝试从用户集合中检索用户、从团队集合中检索团队以及从 coaches 集合中检索教练的示例。
只有当我获得了我正在寻找的所有数据时,我才想让该 Activity “活跃”。
例如:
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
}
如何确保只有当我获得所有三个时,我才会使我的 Activity “启用”?
最佳答案
您无法知道使用 addSnapshotListener()
从数据库获取数据何时完成,因为 Cloud Firestore 是实时数据库,获取数据可能永远不会完成。这就是为什么被命名为实时数据库,因为数据库可以随时更改,可以添加或删除项目。
部分了解您是否拥有特定查询的所有数据的唯一方法是对该查询执行 get()
调用。即使如此,在调用该监听器后数据可能会发生变化,因此您真正拥有的只是特定时刻的快照
。
在您的特定情况下,您可以在每个查询中使用 get()
并将其保存在 Task 对象中。要知道所有任务何时完成,请使用我在以下帖子中的回答:
但是您应该使用三个查询,而不是使用两个查询。
仅当您在数据库中写入或更新数据时才可以使用CompletionListener
,并且当操作完成时您会收到通知已被 Firebase 服务器确认,但读取数据时无法使用此接口(interface)。
关于java - 如何知道多个 SnapshotListener 何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58423474/
Firestore 实时更新文档 here 这是您可以在文档中找到的评论。 Important: The first query snapshot contains added events for
任何人都可以为我指定以下情况下的费用: 当使用快照监听器的查询监听集合并且集合中的一个文档将被添加或更新时,我是否需要为已更新的文档或查询中的所有文档付费? 示例:我在用户集合上有一个快照监听器,其中
我如何知道不同集合的许多 SnapshotListener 已完成? 举一个尝试从用户集合中检索用户、从团队集合中检索团队以及从 coaches 集合中检索教练的示例。 只有当我获得了我正在寻找的所有
我在 Android 应用中使用 Firestore。我创建了一个 User 类,它代表 Firestore 中 users 集合下的一个文档。这是类(class): public class Use
我希望能够在不需要监听更改时停止快照监听器,以便稍后我可以一次获取所有更新。是否可以暂时停止快照监听器?我认为您必须明确删除它并根据文档重新初始化所有内容。所以我可以显式地调用 remove 并重新初
我在将 DispatchGroup (因为它是 recommended here )与 FireStore snapshotListener 一起使用时遇到问题 在我的示例中,我有两个函数。第一个由
我正在 Java 中使用 Firestore,方法如下: firestore.collection("myCollection").addSnapshotListener(listener); 我的
我是一名优秀的程序员,十分优秀!