android - 如何在 Kotlin 中使用 Moshi 和 Retrofit 解析 ArrayList
问题描述
我正在尝试解析来自 apiweather.com 的响应。响应成功,但经过研究,我了解到 Moshi 不解析ArrayList
s,因此在此 SO 帖子之后,我尝试添加一个适配器来解析它们。问题是 Moshi 似乎没有调用适配器并且仍然报告:
com.squareup.moshi.JsonDataException: Expected BEGIN_OBJECT but was BEGIN_ARRAY...
这是我的响应课程。
class NetworkResponse : ArrayList<ResponseItem>()
data class ResponseItem(
val country: String,
val id: Int,
val lat: Double,
val lon: Double,
val name: String,
val region: String,
val url: String
)
我的响应数据如下所示:
[
{
"id": 2555576,
"name": "Washington, District of Columbia, United States of America",
"region": "District of Columbia",
"country": "United States of America",
"lat": 38.9,
"lon": -77.04,
"url": "washington-district-of-columbia-united-states-of-america"
},
{
"id": 2555541,
"name": "Northwest Rectangle, District of Columbia, United States of America",
"region": "District of Columbia",
"country": "United States of America",
"lat": 38.89,
"lon": -77.05,
"url": "northwest-rectangle-district-of-columbia-united-states-of-america"
}
]
这是我的适配器:
class ArrayListMoshiAdapter {
@ToJson fun arrayListToJson(list: ArrayList<ResponseItem>) : List<ResponseItem> = list
@FromJson fun arrayListFromJson(list: List<ResponseItem>) : ArrayList<ResponseItem> = ArrayList(list)
}
我添加使用:
Moshi.Builder()
.add(ArrayListMoshiAdapter())
我是 Moshi 的新手,所以我希望这是一个简单的初学者错误。提前感谢任何解决方案!
解决方案
推荐阅读
- javascript - 使用 AsyncStorage 的 react-native 身份验证应用程序
- android - Flutter apk 构建、安装但随后无法打开
- rust - 通过在 self 中查找键来替换 HashSet 值
- javascript - ReactNative recyclerlistview 项目之间的空间增加或重叠
- c# - Blazor - 将参数传递给父级
- python - 如何使用 zorder 在 matplotlib 中的框架/边框上绘制饼图?
- r - 包含缺失数据时如何在“dplyr”中使用 rowSums()?
- c# - Puppeteersharp - 在带有 .Net Core App 的容器中使用时冗余的 chromium 命令行参数
- bash - 更改时从远程计算机复制文件
- java - Kotlin 中的“Arrays.copyOf”