Kotlin Android Firebase数据库哈希图转换为类

Ray*_*mta 2 android android-gridview kotlin firebase-realtime-database

我正在尝试从Firebase数据库获取数据。断点表明它正在获取数据,但是看来我没有正确地将其分配给我的班级。

导致此异常:

java.lang.ClassCastException:无法将java.util.HashMap强制转换为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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是数据库导出:

{
 "dashboard" : [ 
    { "name" : "News"}, 
    { "name" : "Chatroom"},
    { "name" : "Music"},
    { "name" : "Quotes"},
    { "name" : "Reminder"},
    { "name" : "Poll"},
    { "name" : "Suggestion"},
    { "name" : "LogOut"} ]  
}
Run Code Online (Sandbox Code Playgroud)

我要创建的类对象

data class DashboardItem(val name: String = "")
Run Code Online (Sandbox Code Playgroud)

Pav*_*ngh 5

问题:DataSnapshot#getValue() 只会native types

Boolean
String
Long
Double
Map<String, Object> // closest to your object representation
List<Object>
Run Code Online (Sandbox Code Playgroud)

Map<String, Object>请求时将作为对象返回哪里,因此在应用显式强制转换时出错

因此,而不是使用DataSnapshot#getValue(Class<T> valueType)

val item : DashboardItem = it.getValue(DashboardItem::class.java)
Run Code Online (Sandbox Code Playgroud)