如何使用Kotlin从Firebase数据库检索数据?
这是我在Firebase上上传的模型:
public class OnlineMatch{ private User user1; private User user2; public OnlineMatch(User firstPlayer, User secondPlayer) { this.user1 = firstPlayer; this.user2 = secondPlayer; } }
然后我以这种方式将数据发送到Firebase(kotlin):
fun createMatch(match: OnlineMatch) { val matchList = database.child("multiplayer").push() matchList.setValue(match) }
因此,我的数据库结构如下:
如果我展开一个节点,我可以完美地看到我的对象:OnlineMatch(User1,User2)
现在我想查询数据库,并获得一个ArrayList'<'OnlineMatch'>'。 我已经找到了Firebase文档,但是我没有发现任何用处。 我能怎么做? 提前致谢。
你没有找到有用的东西,因为当你查询一个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)
正如你可能看到我已经评论了最后一行,因为没有必要使用setter来设置一个userObject
。
非常重要的是,不要忘记在Firebase所需的OnlineMatch
类中添加the no argument constructor
。
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()) } } })
希望它有帮助。
- KotterKnife – 对某些类不能使用bindView(R.id.example_id)
- Kotlin自定义对话框指定为非null的参数
- Stepstone – 材料步进器
- Kotlin在Android Studio 3.0-alpha8中应用()扩展lint消息
- onclick在android studio中不使用kotlin响应
- Anko中简单的MapRowParser是什么?
- 包含Android扩展的Kotlin类不是建立在随后的构建上的
- 警告:警告:注释处理器“android.arch.lifecycle.LifecycleProcessor”支持的源版本“RELEASE_7”小于“源”1.8
- 安科:适用的内部范围,混淆财产的决议