区分首次查询快照和更改Firestore中的侦听器

RmK*_*RmK 5 android listener firebase android-recyclerview google-cloud-firestore

我在这里关注firestore的文档,并尝试将快照侦听器附加到集合上以获取实时更新。

我在尝试区分来自Snapshot事件侦听器的响应是第一次响应(在这种情况下,将返回集合中的所有文档)还是在更改事件响应(在这种情况下,我想添加检查)之间遇到麻烦确定发生了什么变化。同一文档中的此脚注如下:

重要说明:第一个查询快照包含与查询匹配的所有现有文档的已添加事件。这是因为您要进行一系列更改,使查询快照具有当前查询的初始状态

没有提到如何将第一个查询快照与随后的快照标识在一起。

只有相关的问题,我可以找到因此,这是一个,但它不会在我的情况帮助。

真的很感激任何帮助,因为我已经用不完了。

谢谢。

Dou*_*son 3

仔细查看您引用的文档中的代码。它检查QuerySnapshot 对象中每个DocumentChange对象的类型:

for (DocumentChange dc : snapshots.getDocumentChanges()) {
    switch (dc.getType()) {
        case ADDED:
            Log.d(TAG, "New city: " + dc.getDocument().getData());
            break;
        case MODIFIED:
            Log.d(TAG, "Modified city: " + dc.getDocument().getData());
            break;
        case REMOVED:
            Log.d(TAG, "Removed city: " + dc.getDocument().getData());
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

这与您引用的文字一致:

第一个查询快照包含与查询匹配的所有现有文档的添加事件。

您可以判断您是否是第一次看到某个文档,因为它是“添加”类型的更改。MODIFIED 和 REMOVED 类型更改仅针对您之前见过的此侦听器的文档发出。

  • 您当然可以在侦听器中维护自己的状态,该侦听器知道这是否是第一次被调用。 (3认同)
  • 谢谢道格。如果我知道这是第一个查询快照,我希望跳过此 switch-case 检查并传递整个列表,我可以使用它来填充 UI。对于对事件侦听器的后续调用,我计划使用检查并考虑文档更改类型等。这是否可能? (2认同)