Kotlin Android Firebase 数据库 Hashmap 转换为类
Posted
技术标签:
【中文标题】Kotlin Android Firebase 数据库 Hashmap 转换为类【英文标题】:Kotlin Android Firebase Database Hashmap Cast to Class 【发布时间】:2018-04-08 00:18:55 【问题描述】:我正在尝试从 firebase 数据库中获取数据。 断点显示它正在获取数据,但看起来我没有正确地将它分配给我的班级。
导致此异常的原因:
java.lang.ClassCastException: java.util.HashMap 无法转换为 类
override fun onDataChange(p0: DataSnapshot?)
if (p0!!.exists())
val children = p0!!.children
children.forEach
println(it.value.toString())
var item : DashboardItem = it.value as DashboardItem
println(item)
这是数据库导出:
"dashboard" : [
"name" : "News",
"name" : "Chatroom",
"name" : "Music",
"name" : "Quotes",
"name" : "Reminder",
"name" : "Poll",
"name" : "Suggestion",
"name" : "LogOut" ]
我要创建的类对象
data class DashboardItem(val name: String = "")
【问题讨论】:
【参考方案1】:问题:DataSnapshot#getValue()
将仅返回 native types
Boolean
String
Long
Double
Map<String, Object> // closest to your object representation
List<Object>
Map<String, Object>
在请求时将作为对象返回,因此在应用显式转换时会出错
所以改为使用DataSnapshot#getValue(Class<T> valueType)
val item : DashboardItem = it.getValue(DashboardItem::class.java)
【讨论】:
感谢辛格先生 val item : DashboardItem = it.getValue(DashboardItem::class.java)!!必须添加!! 很高兴能帮助卡姆塔先生,编码愉快以上是关于Kotlin Android Firebase 数据库 Hashmap 转换为类的主要内容,如果未能解决你的问题,请参考以下文章
使用 Kotlin 的 Firebase 云消息传递 Android
如何使用kotlin在Android的firebase中获取child的键值
在同一张地图上显示多个注册用户的位置(Android Studio、Firebase、Kotlin)
Firebase Android -- 在 Kotlin 中使用电子邮件和密码创建用户