【问题标题】:Kotlin/Firebase get list of objectsKotlin/Firebase 获取对象列表
【发布时间】:2019-07-09 02:36:03
【问题描述】:

如何从 实时数据库 中获取对象列表?

我正在尝试获取对象列表以将列表发送到我的改编并打印列表,所以我想获取列表。

我所做的就是下面的代码:

    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 中设置 List 列表。我想应该类似于下面的代码,但不确定是否是最好的方法:

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!!)
            }
        }
    })

【问题讨论】:

  • 如果您的列表在onDataChange() 函数之外是空的,请查看我在此post 中的回答,了解您为什么会有这种行为以及如何解决这个问题使用自定义回调。

标签: list firebase kotlin


【解决方案1】:

您可以使用 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
}

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 2017-03-13
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多