【问题标题】:Kotlin Android Firebase Database Hashmap Cast to ClassKotlin Android Firebase 数据库 Hashmap 转换为类
【发布时间】: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 = "")

【问题讨论】:

    标签: android firebase-realtime-database kotlin android-gridview


    【解决方案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)!!必须添加!!
    • 很高兴能帮助卡姆塔先生,编码愉快
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多