Java 如何侦听Firestore中文档列表的实时更新?

Java 如何侦听Firestore中文档列表的实时更新?,java,android,firebase,kotlin,google-cloud-firestore,Java,Android,Firebase,Kotlin,Google Cloud Firestore,目前,我正在使用get(),从Firestore获取一些文档。这是我的代码: val ids = getIds() val tasks: MutableList<Task<DocumentSnapshot>> = mutableListOf() for (id in ids) { tasks.add(collRef.document(id).get()) } Tasks.whenAllSuccess<DocumentSnapshot>(tasks).a

目前,我正在使用
get()
,从Firestore获取一些文档。这是我的代码:

val ids = getIds()
val tasks: MutableList<Task<DocumentSnapshot>> = mutableListOf()
for (id in ids) {
    tasks.add(collRef.document(id).get())
}
Tasks.whenAllSuccess<DocumentSnapshot>(tasks).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        for (doc in task.result!!) {
            Log.d("TAG", doc.getString("name"))
        }
    }
}
但安卓工作室抱怨:

Unresolved reference: addSnapshotListener

如何监听所有25个文档的实时更新?谢谢

我对Kotlin不是很熟练,但是当我需要听Java中的集合时,首先我创建文档集合的引用,然后像这样向集合添加SnapshotListener

CollectionReference ref = FirebaseFirestore.getInstance().collection("MyCollection");
    ref.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@androidx.annotation.Nullable QuerySnapshot queryDocumentSnapshots, @androidx.annotation.Nullable FirebaseFirestoreException e) {
            //Here use queryDocumentSnapshot to retrieve every document data
        }
    });
collectionref=FirebaseFirestore.getInstance().collection(“MyCollection”);
ref.addSnapshotListener(新的EventListener(){
@凌驾
public void onEvent(@androidx.annotation.Nullable QuerySnapshot queryDocumentSnapshots,@androidx.annotation.Nullable FirebaseFirestoreException e){
//这里使用queryDocumentSnapshot检索每个文档数据
}
});
使用queryDocumentSnapshots可以检索收藏的实时更新


您还可以使用查询来选择需要侦听哪些文档

我对Kotlin不太熟悉,但是当我需要侦听Java中的集合时,首先创建文档集合的引用,然后像这样将SnapshotListener添加到集合中

CollectionReference ref = FirebaseFirestore.getInstance().collection("MyCollection");
    ref.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@androidx.annotation.Nullable QuerySnapshot queryDocumentSnapshots, @androidx.annotation.Nullable FirebaseFirestoreException e) {
            //Here use queryDocumentSnapshot to retrieve every document data
        }
    });
collectionref=FirebaseFirestore.getInstance().collection(“MyCollection”);
ref.addSnapshotListener(新的EventListener(){
@凌驾
public void onEvent(@androidx.annotation.Nullable QuerySnapshot queryDocumentSnapshots,@androidx.annotation.Nullable FirebaseFirestoreException e){
//这里使用queryDocumentSnapshot检索每个文档数据
}
});
使用queryDocumentSnapshots可以检索收藏的实时更新

您还可以使用查询选择需要侦听哪些文档以执行任务。whenAllSuccess()返回一个新的任务对象,该对象在所有其他任务完成时完成。这在这里根本行不通,因为听众永远不会真正“完成”。如果试图使用侦听器而不是使用
get()
一次性获取,则需要在每个文档引用上设置一个侦听器,如中所示

没有“批量侦听”操作。每个引用都需要附加一个侦听器。如果需要,可以将相同的对象传递给每个对象,而不是为每个对象创建新对象

完成任务后,不要忘记删除侦听器。

任务。whenAllSuccess()
返回一个新任务对象,该对象在所有其他任务完成时完成。这在这里根本行不通,因为听众永远不会真正“完成”。如果试图使用侦听器而不是使用
get()
一次性获取,则需要在每个文档引用上设置一个侦听器,如中所示

没有“批量侦听”操作。每个引用都需要附加一个侦听器。如果需要,可以将相同的对象传递给每个对象,而不是为每个对象创建新对象


完成后别忘了删除侦听器。

谢谢,但这不是我的情况。我不是在听一个集合或一个查询。我只有一个
DocumentSnapshot
列表,我在成功时将其传递给
。对于每个文档,我都需要实时更新。好的,我想到的唯一解决方案是为每个文档创建一个For{}循环和addSnapshotListener,但我不确定您要找的是什么,但这不是我的情况。我不是在听一个集合或一个查询。我只有一个
DocumentSnapshot
列表,我在成功时将其传递给
。对于每个文档,我都需要实时更新。好的,我想到的唯一解决方案是为每个文档创建一个For{}循环和addSnapshotListener,但我不确定您要找的是什么谢谢Doug的回答。我考虑过这一点,但为每个文档附加这么多侦听器不是代价高昂还是不好的做法吗?在我的例子中有25个,但如果我有超过50个?唯一的成本是获取初始数据和所有更新所需的文档读取。有很多听众不是问题。如果这不是问题,我会继续使用这些听众。谢谢,道格,谢谢你的回答。我考虑过这一点,但为每个文档附加这么多侦听器不是代价高昂还是不好的做法吗?在我的例子中有25个,但如果我有超过50个?唯一的成本是获取初始数据和所有更新所需的文档读取。有很多听众不是问题。如果这不是问题,我会继续使用这些听众。非常感谢。
for (id in ids) {
    collRef.document(id).addSnapshotListener { snapshot, e -> 
        // handle the updates here
    }
}