Kotlin Android Firebase 数据库 Hashmap 转换为 Class

Kotlin Android Firebase Database Hashmap Cast to Class

我正在尝试从 firebase 数据库获取数据。 断点显示它正在获取数据,但看起来我没有正确地将它分配给我的 class.

导致此异常的原因:

java.lang.ClassCastException: java.util.HashMap cannot be cast to Class

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"} ]  
}

我要创建的 class 对象

data class DashboardItem(val name: String = "")

问题:DataSnapshot#getValue() 将 return 仅 native types

Boolean
String
Long
Double
Map<String, Object> // closest to your object representation
List<Object>

其中 Map<String, Object> 将在请求时被 return 编辑为对象,因此当您应用显式强制转换时会出现错误

所以使用 DataSnapshot#getValue(Class<T> valueType) 作为

val item : DashboardItem = it.getValue(DashboardItem::class.java)