代码之家  ›  专栏  ›  技术社区  ›  gon250

Kotlin/Firebase获取对象列表

  •  0
  • gon250  · 技术社区  · 5 年前

    如何从中获取对象列表

    我正在尝试获取一个列表到对象,以将列表发送到我的应用程序并打印列表,因此我想获取列表。

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

        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 回复  |  直到 5 年前
        1
  •  1
  •   Sergio    5 年前

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