我正在尝试设置一个通用类来从Firebase检索数据,但我在解析部分卡住了。
override fun onDataChange(snapshot: DataSnapshot) {
try {
val data: T? = snapshot.getValue(dataType)
onDataReadFromDatabase(data, d, snapshot, changeListener)
} catch(e: Exception) {
d.resumeWithException(e)
}
}
T
是我的数据类型,dataType
是Class<T>
。这对于平面数据结构来说运行得很好,但是当有一个list
作为T
的子元素时,它会失败,并显示Expected a List while deserializing, but got a class java.util.HashMap
。
以下是一个失败的数据结构示例:
{
"id": "xxx",
"name": "test",
"items": {
"a": {"name": "itemA"},
"b": {"name": "itemB"},
"c": {"name": "itemC"},
"d": {"name": "itemD"}
}
}
使用这样的模型:
data class ItemList(val id: String, val name: String, val items: MutableList<Item>) {
...
}
我知道有一种方法可以通过循环来解析子项,就像这里所说的那样(链接),但这是通过知道项目类别来实现的。
我期望的是一种方法,可以告诉Firebase解析器:每次需要将映射转换为列表时,请使用函数x。
GenericTypeIndicator
,因为它似乎是一个很好的起点,但没有成功。 - MHogge