首页 > 解决方案 > Kotlin - Firebase 数据库 - 将 DataSnapShot 转换为 Hashmap

问题描述

我正在从数据库中检索一个如下所示的节点:

 DataSnapshot { key = appointment, value = {timeAppointment=12:00pm, dateAppointment=12/12/1221, clientUID=Bu4sw8ouUUhDv0Ut1IKqeh8kESg2, caseManagerName=Karla Moreno, userName=Sakura Nakamura, formatAppointment=Zoom} }

此 DataSnapshot 存储在自定义回调中。但是,我只能将其作为 DataSnapshot 检索。我想检索这些值,并使用 TextView 显示它们。

除了将值硬编码为 HashMap 之外,有没有办法将其转换为 HashMap?

这是我的代码:

 class ViewAppointments : AppCompatActivity() {
 var readAppointment: String? = null

 override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     setContentView(R.layout.activity_view_appointments)

     readData(object : AppointmentCallback {
         override fun onCallback(value: DataSnapshot) {
             //Here readAppointment is of type DataSnapshot
             readAppointment = value.toString()
             Log.d("ZXC", "$readAppointment")
         }
     })
     displayData()
 }

 private fun displayData() {
     // returns null
     Log.d("ZXC", "Display appointment from Database: $readAppointment")

 }

 private fun readData(appointmentCallback: AppointmentCallback) {
     val uid = FirebaseAuth.getInstance().currentUser!!.uid
     val rootRef = FirebaseDatabase.getInstance().reference

     val uidRef = rootRef.child("users").child(uid)
     val valueEventListener = object : ValueEventListener {
         override fun onDataChange(dataSnapshot: DataSnapshot) {
             for (item in dataSnapshot.children) {
                 if (item.key.toString() == "appointment") {
                     //item = DataSnapshot { key = appointment, value = {timeAppointment=12:00pm, dateAppointment=12/12/1221,
                     // clientUID=Bu4sw8ouUUhDv0Ut1IKqeh8kESg2, caseManagerName=Karla Moreno, userName=Sakura Nakamura,
                     // formatAppointment=Zoom} }
                     Log.d("ZXC", "$item")
                     appointmentCallback.onCallback(item)
                 }
             }
         }
         override fun onCancelled(databaseError: DatabaseError) {
         }
     }
     uidRef.addListenerForSingleValueEvent(valueEventListener)
 }

 interface AppointmentCallback {
     fun onCallback(value: DataSnapshot)
 }

}

标签: androidkotlinfirebase-realtime-database

解决方案


要获取快照中的值映射,请调用其getValue()方法。这实际上可能映射到valueKotlin 中的属性。


推荐阅读