我有一个约会类的应用程序(不支持聊天),其中显示与用户匹配特定条件的所有配置文件的列表。我为此使用了实时快照侦听器。
query.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot snapshot,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
return;
}
if (snapshot != null && !snapshot.isEmpty()) {
List<FeedDetails> feedDetailsList = new ArrayList<>();
for (DocumentSnapshot document : snapshot.getDocuments()) {
FeedDetails feedDetails = document.toObject(FeedDetails.class);
feedDetailsList.add(feedDetails);
}
feedItemAdapter.updateData(feedDetailsList);
}
}
});
在个人资料文档中,我有10-12个字段,其中有一个在线/离线信息字段。因此可以说,如果某些配置文件的其他字段没有更改,但在线/离线状态发生了更改,那么侦听器将再次读取该文档。有什么方法可以减少这些读取?
答案 0 :(得分:2)
我有一个10-12字段,其中包含一个在线/离线信息字段。因此,假设某些配置文件的其他字段没有更改,但在线/离线状态发生了变化,那么侦听器将再次读取该文档。
在Cloud Firestore中,您无法只听文档的一组属性而排除其他属性。这是整个文档,或者什么也没有。因此,如果将此字段online=true
更改为online=false
,那么您将获得整个文档。
Cloud Firestore侦听器在文档级别触发,并始终返回完整的文档。不幸的是,尽管服务器SDK的select()方法中确实存在此选项,但无法通过客户端SDK仅请求文档的一部分。
如果您不想收到有关特定字段的通知,请考虑添加包含仅包含这些字段的文档的额外集合。因此,请创建额外的集合,其中每个文档仅包含您不需要的数据。这样,您就不会收到在线/离线更改的通知。