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)
我正在尝试从 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)