如何使用Kotlin从Firebase数据库检索数据?

Gia*_*oli 5 android kotlin firebase firebase-realtime-database

这是我在Firebase上上传的模型:

public class OnlineMatch{

private User user1;
private User user2;

public OnlineMatch(User firstPlayer, User secondPlayer) {
        this.user1 = firstPlayer;
        this.user2 = secondPlayer;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后我以这种方式将数据发送到Firebase(kotlin):

 fun createMatch(match: OnlineMatch) {
        val matchList = database.child("multiplayer").push()
        matchList.setValue(match)
    }
Run Code Online (Sandbox Code Playgroud)

因此,我的数据库结构如下:

在此处输入图片说明 如果扩展节点,则可以完美地看到我的对象:OnlineMatch(User1,User2)

现在,我想查询数据库并获取ArrayList'<'OnlineMatch'>'。 我已经找到了Firebase文档,但没有发现任何有用的信息。我能怎么做?提前致谢。

Ale*_*amo 4

您没有找到有用的东西,因为当您查询 Firebase 数据库时,您得到的是 aMap而不是ArrayList。Firebase 中的所有内容都是由键和值对构成的。ArrayList对于 Firebase 而言,使用 an是一种反模式。Firebase 建议不要使用数组的众多原因之一是它使安全规则无法编写。

不需要Kotlingetter 和 setter。确实,这些函数在幕后存在,但不需要显式定义它们。要设置这些字段,您可以使用以下代码:

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)
Run Code Online (Sandbox Code Playgroud)

正如您可能看到的,我已经评论了最后一行,因为不需要使用 setter 来设置userObject.

非常重要的是,不要忘记添加Firebase 所需的类the no argument constructor。OnlineMatch

public OnlineMatch() {}
Run Code Online (Sandbox Code Playgroud)

编辑:

要实际获取数据,只需在所需节点上放置一个侦听器并将数据从对象中获取dataSnapshot到 HashMap 中。

val map = HashMap<String, OnlineMatch>()
Run Code Online (Sandbox Code Playgroud)

然后简单地迭代如下HashMap:

for ((userId, userObject) in map) {
    //do what you want with them
}
Run Code Online (Sandbox Code Playgroud)

或者简单地使用下面的代码:

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())
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。