添加snapshotListener时禁用第一个查询快照

时间:2017-12-01 20:29:21

标签: android firebase listener google-cloud-firestore

Firestore实时更新文档here

以下是您可以在文档中找到的评论。

  

重要提示:第​​一个查询快照包含所有已添加的事件   与查询匹配的现有文档。这是因为你是   获取一组使您的查询快照最新的更改   查询的初始状态。例如,这允许你   直接从您在第一个中收到的更改填充您的UI   查询快照,无需添加特殊逻辑来处理   初始状态。

我理解它是如何有用的,但在某些情况下它只是困扰我,我想知道是否有任何方法可以防止第一个查询快照骚扰听众。

2 个答案:

答案 0 :(得分:2)

AtomicBoolean isFirstListener = new AtomicBoolean(true);

commentListener = getLectureCommentsCollecReference(courseId, lectureId)
                .addSnapshotListener((queryDocumentSnapshots, e) -> {
                    if (isFirstListener.get()) {
                        isFirstListener.set(false);
                        //TODO Handle the entire list. 
                        return;
                    }
                    for (DocumentChange dc : queryDocumentSnapshots.getDocumentChanges()) {
                        switch (dc.getType()) {
                            case ADDED:
                                sendCommentAddedEvent(DataParser.parseComment(dc));
                            case MODIFIED:
                                sendCommentUpdatedEvent(DataParser.parseComment(dc));
                                break;
                        }
                    }
                });

这是一种做法。 我在评论功能中使用它来收听新评论添加以及评论是否被修改。

答案 1 :(得分:1)

无法抑制获取初始数据。

根据用例的不同,您可能希望将侦听器附加到数据的子集。例如。如果您有仅附加方案(例如聊天),则可以开始侦听在"现在"之后修改的数据。