gpt4 book ai didi

java - 如何知道多个 SnapshotListener 何时完成?

转载 作者:行者123 更新时间:2023-12-02 09:24:36 26 4
gpt4 key购买 nike

我如何知道不同集合的许多 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com