【发布时间】:2021-09-19 14:48:11
【问题描述】:
来自服务器的模型响应:
[
{
"at1": true,
"at2": "2021-07-09T08:05:54.307Z",
"at3": "ANDROID",
}
]
实际回复:[]
错误:com.squareup.moshi.JsonDataException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at path $
interface SomeInterface {
fun getData(): Single<List<CustomObj>>
}
@Parcelize
data class CustomObj(
val at1: Boolean,
val at2: Date,
val at3: String
) : Parcelable
我尝试使用@JsonClass(generateAdapter = true),但没有帮助。
映射:
fun toEntities(items: List<ServerResponse>?): List<CustomObj> {
return items?.mapNotNull { toEntity(it) } ?: listOf()
}
private fun toEntity(item: ServerResponse): CustomObj? {
return CustomObj(
at1 = item.smth1 ?: return null,
at2 = item.smth2 ?: return null,
at3 = item.smth3 ?: return null
)
}
【问题讨论】:
-
你能发布你的代码吗?我的意思是将响应转换为Java模型的代码
-
@KhalidTaha 添加了映射部分
-
根据我的经验,它应该是 Serializable 而不是 Parcelable,请使用 Gson 尝试以下代码:
List<CustomObj> list = new Gson().fromJson(yourJsonResponse, new TypeToken<List<CustomObj>>(){}.getType());如果这有效,那么它是如何将响应转换为 java 模型的方式的问题。 -
明确一点,您的服务器只返回一个对象列表,对吧?它不像 { "fields":[ ] } 对吧?
-
@KhalidTaha Parcelize 非常适合这个问题。如果服务器响应正确映射,即使自动生成适配器也能很好地工作