Kotlin / Firebase получить список объектов - PullRequest
0 голосов
/ 15 февраля 2019

Как я могу получить список объектов из База данных реального времени ?

Я пытаюсь получить список объектов, чтобы отправить список в мою адаптированную и распечатать список, поэтому я хотел бы получить список.

Итак, что я сделал, так это код ниже:

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

1 Ответ

0 голосов
/ 15 февраля 2019

Вы можете использовать лямбду в качестве обратного вызова, чтобы получать уведомления при получении данных, например:

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

Когда вы вызываете эту функцию, вы можете указать лямбду в конце, которая будет уведомлена при загрузке списка:

loadList {
    // `it` contains the list
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...