Вы не нашли ничего полезного, потому что при запросе к базе данных Firebase вы получаете Map
, а не ArrayList
. Все в Firebase структурировано как пары ключ и значение. Когда дело доходит до Firebase, использование ArrayList
- это антипаттерн. Одна из многих причин, по которым Firebase не рекомендует использовать массивы, заключается в том, что это делает невозможным запись правил безопасности.
В Kotlin
нет необходимости в геттерах и сеттерах. Верно, что за кулисами эти функции существуют, но нет необходимости явно определять их. Чтобы установить эти поля, вы можете использовать следующий код:
val onlineMatch = OnlineMatch() //Creating an obect of OnlineMatch class
onlineMatch.user1 = userObject //Setting the userObject to the user1 field of OnlineMatch class
//onlineMatch.setUser(userObject)
Как вы, наверное, заметили, я прокомментировал последнюю строку, потому что нет необходимости использовать сеттер для установки userObject
.
И очень важно, не забудьте добавить the no argument constructor
в свой OnlineMatch
класс, который необходим для Firebase.
public OnlineMatch() {}
Изменить:
Чтобы получить данные, просто поместите слушателя на желаемый узел и получите данные из объекта dataSnapshot
в HashMap.
val map = HashMap<String, OnlineMatch>()
Затем просто перебирайте HashMap
следующим образом:
for ((userId, userObject) in map) {
//do what you want with them
}
Или просто используйте приведенный ниже код:
val rootRef = firebase.child("multiplayer")
rootRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(error: FirebaseError?) {
println(error!!.message)
}
override fun onDataChange(snapshot: DataSnapshot?) {
val children = snapshot!!.children
children.forEach {
println(it.toString())
}
}
})
Надеюсь, поможет.
02.08.2017