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&lt;String, Object&gt; 在请求时将作为对象返回,因此在应用显式转换时会出错

所以改为使用DataSnapshot#getValue(Class&lt;T&gt; 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 中使用电子邮件和密码创建用户

使用 kotlin for android app 将 pdf 文件上传到 firebase 存储

在 Firebase 实时数据库中保存数据 Android Studio Kotlin