繁体   English   中英

循环遍历来自 Firebase 的节点 Android Studio 中的实时数据库与 Kotlin

[英]Looping through nodes from Firebase Real-time database in Android Studio with Kotlin

使用 Android Studio 和 firebase 下面的链接显示了我们数据库的结构。

还添加了复制粘贴结构的 json 文件的样子。

https://i.stack.imgur.com/X3vkz.png

 "Events" : {
"-MxoB2kU8Okx0gFbnEIx" : {
  "addGoogleMaps" : true,
  "address" : "Gjuterivägen 3",
  "bringAlcohol" : false,
  "date" : "WEDNESDAY 23 FEBRUARY 2022",
  "description" : "Fest på holma",
  "endTime" : "End Time: 22:15",
  "maxAttendees" : 6,
  "overallsOn" : true,
  "ownerEmail" : "testemail123@email.com",
  "plusOne" : false,
  "startTime" : "Start Time: 06:15",
  "title" : "Fest hos Mange"
},

最终数据库中会同时出现 50 个这样的事件,我需要做的是遍历所有这些事件,而不知道它们的节点名称并收集我需要的东西。

问题:

使用Kotlin ,我如何在不在循环中使用字符串路径的情况下访问事件中的每个子项,并从每个子项中获取以下变量:

标题、位置和日期。

有了这些,我需要实例化一个代表那个孩子的 object,然后将其放入:

private val events = mutableListOf<Event>()

我编辑了整个问题,我希望这比以前更容易理解。 谢谢!

感谢 Frank Van Puffelen(在评论中)链接了一些非常有用的东西,它似乎按照我想要的方式工作!

https://firebase.google.com/docs/database/android/lists-of-data#read_and_write_lists

这是解决方案:

val database = FirebaseDatabase.getInstance().getReference("Events")
database.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            for (postSnapshot in dataSnapshot.children) {
                println(postSnapshot.child("title").value)
                //Here i can just get what ever variable i need with the line above.
            }
        }

        override fun onCancelled(databaseError: DatabaseError) {
            // Getting Post failed, log a message
            Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
            // ...
        }
    })

您是否尝试过这样的事情:

mDatabase.child("Events").get().addOnSuccessListener {
    Log.i("firebase", "Got events: ${it}")
}.addOnFailureListener{
    Log.e("firebase", "Error getting data", it)
}

通常建议使用ValueEventListener而不是get()https://firebase.google.com/docs/database/android/read-and-write#read_data_once

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM