【问题标题】:How to automatically detect new document in collection of Firebase Firestore?如何自动检测 Firebase Firestore 集合中的新文档?
【发布时间】:2019-01-29 17:26:43
【问题描述】:

我想制作一个 Android 聊天应用程序。所以我想知道如何在创建新文档时自动从 Firebase Firestore 获取数据?实际上我不想使用添加快照侦听器,因为它可以提供单个文档的实时数据更改,但想找出实时更新的 Firebase Firestore 文档。请给我建议。

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    我不知道您是否可以在没有快照侦听器的情况下执行此操作。 检查此代码,如果它是您想要的。

    private void addRealtimeUpdate() {
        DocumentReference contactListener=db.collection("PhoneBook").document("Contacts");
        contactListener.addSnapshotListener(new EventListener < DocumentSnapshot > () {
        @Override
        public void onEvent(DocumentSnapshot documentSnapshot, 
            FirebaseFirestoreException e) {
             if (e != null) {
                Log.d("ERROR", e.getMessage());
                return;
             }
             if (documentSnapshot != null && documentSnapshot.exists()) {
                Toast.makeText(MainActivity.this, "Current data:" + 
              documentSnapshot.getData(), Toast.LENGTH_SHORT).show();
            }
         }
        });
      }
    

    【讨论】:

    • 但是先生,只有它的显示字段。但我想显示每个文件而不是特定文件。那我能做什么
    • 我想您可以为所有对象动态地执行此操作
    【解决方案2】:

    为了解决这个问题,我推荐你使用 CollectionReference 的get() 方法。这是Firebase实时数据库中对应的addListenerForSingleValueEvent()方法。

    执行查询并将结果作为 QuerySnapshot 返回。

    如果您想使用 Firebase-UI 库,推荐使用 this 方法,您可以从 Cloud Firestore 数据库中检索数据并使用 FirestoreRecyclerAdapter 将其显示在 RecyclerView 中.

    【讨论】:

    • 我不明白您如何接受使用addSnapshotListener 为您提供解决方案的答案,因为您在问题中明确要求:I do not wanna use add snapshot listener?!
    • addListenerForSingleValueEvent() 每次创建新文档时都会赋予文档价值?
    • 是的,没错,但这发生在 Firebase 实时数据库中。 Firestore中对应的是get()方法吧?
    • get() 方法只有在我们调用它时才有效。没有一次又一次地调用一个方法是怎么可能的。假设有新文档进来,那么如何从 firestore 自动获取数据
    • 如果你想要实时数据,你应该添加一个监听器,但你说你不想要。如果您只想获取一次数据,那么只需拨打get() 电话。如果你想要更多,你可以使用 Firebase-UI,就像我在这个 post 的回答中解释的那样,我已经解释了如何从 Cloud Firestore 数据库中检索数据并将其显示在RecyclerView 使用 FirebaseRecyclerAdapter。在这种情况下,您将能够收到您添加的每个新文档。
    【解决方案3】:

    我不知道你是否可以使用 firestore 来做到这一点,但使用实时数据库你可以使用 .on()。如果您的应用程序的其余部分使用 Firestore,则每个项目都可以使用云 Firestore 和实时数据库。文档非常简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-21
      • 2023-02-10
      • 1970-01-01
      • 2019-11-04
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多