android - 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)
}
}
解决方案
要获取快照中的值映射,请调用其getValue()
方法。这实际上可能映射到value
Kotlin 中的属性。
推荐阅读
- html - 如何使元素与 body 颜色相同并在其后面隐藏一些东西?
- c# - 如何在实体框架中使用更新数据视图
- c - arm链接器在函数调用中使用的“单板”是什么?
- python - 一个用户的多个 Django 记录
- vb.net - RDP 请求密码
- ffmpeg - Windows 服务器上的 FFMPEG“未知编码器‘libfaac’”
- c# - 在 AWS CDK (C#) 中创建具有常量 JSON 参数的规则
- powershell - 如何在 powershell 中检测 Linux 或 macOS 或 Windows?
- ios - 显示飞溅视图在动画后显示空白屏幕
- laravel - 即使通知值也需要下拉菜单 - Voyager Laravel