如何从实时数据库获取对象列表?
我正在尝试获取对象的列表,以将列表发送给我的适应者并打印该列表,因此我想获取该列表。
如此糟糕的是下面的代码:
myRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(snapshotError: DatabaseError) {
TODO("not implemented")
}
override fun onDataChange(snapshot: DataSnapshot) {
val children = snapshot!!.children
children.forEach {
println(it.toString()) // its working.
}
}
})
我的课:
data class MyClass(val name: String, val description: String, val fromDate: Long, val toDate: Long)
我不知道如何在 onDataChange 中设置列表列表。我想应该是下面的代码,但不确定是否是最好的方法:
private val list : MutableList<MyClass> = mutableListOf()
myRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(snapshotError: DatabaseError) {
TODO("not implemented")
}
override fun onDataChange(snapshot: DataSnapshot) {
for (objSnapshot in snapshot.getChildren()) {
val myClass= objSnapshot .getValue(MyClass::class.java)
list.add(myClass!!)
}
}
})
答案 0 :(得分:0)
您可以将lambda用作回调,以便在检索数据时得到通知,例如:
fun loadList(callback: (list: List<MyClass>) -> Unit) {
myRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(snapshotError: DatabaseError) {
TODO("not implemented")
}
override fun onDataChange(snapshot: DataSnapshot) {
val list : MutableList<MyClass> = mutableListOf()
val children = snapshot!!.children
children.forEach {
list.add(it.getValue(MyClass::class.java))
}
callback(list)
}
})
}
调用该函数时,您可以在末尾指定lambda,以便在加载列表时得到通知:
loadList {
// `it` contains the list
}