【发布时间】:2021-05-11 14:21:36
【问题描述】:
如何通过获取实时更新或更改来使用 LiveData 实现 Firestore 查询?
之前我使用单个文档快照,这对我来说效果很好,但现在我想处理文档列表或查询。
单文档的实现如下图(工作中):
class ItemLiveData(private val reference: DocumentReference) :
LiveData<Item> () , EventListener<DocumentSnapshot> {
private var registration : ListenerRegistration? = null
override fun onActive() {
super.onActive()
registration = reference.addSnapshotListener(this)
}
override fun onInactive() {
super.onInactive()
registration?.remove()
}
override fun onEvent(value: DocumentSnapshot?, error: FirebaseFirestoreException?) {
value?.let {
setValue(Item(it.id,it.getString("name")!!))
}
} }
ViewModel 实现:
private val firestore = Firebase.firestore.collection("cities")
fun getItemLiveData(): ItemLiveData {
return ItemLiveData(firestore.document("IGjSiK0mDVQp20zWqNMD"))
}
上面给出的代码可以完美地用于单个文档,但是如果有查询呢?
我正在尝试实现这样的东西:
class FirestoreQueryLiveData(private val query: Query)
: LiveData<List<DocumentSnapshot>>(), EventListener<QuerySnapshot> {
private lateinit var registration: ListenerRegistration
override fun onActive() {
super.onActive()
registration = query.addSnapshotListener(this)
}
override fun onInactive() {
super.onInactive()
registration.remove()
}
override fun onEvent(value: QuerySnapshot?, error: FirebaseFirestoreException?) {
val documents:List<DocumentSnapshot> = value?.documents as List<DocumentSnapshot>
postValue(documents)
}
}
如果我在代码中的任何地方犯了任何错误,请帮助我?
我的问题是:如何将这些 QuerySnapshot 转换为 List 并更新现有列表或 RecyclerView?
【问题讨论】:
-
您是否尝试将
List<DocumentSnapshot>转换为List<Item>并将其传递给您的适配器? -
怎么做,因为它是一个列表,它在观察者中返回 List
标签: android firebase kotlin google-cloud-firestore