首页 > 解决方案 > 如何在 Kotlin 中使用 Moshi 和 Retrofit 解析 ArrayList

问题描述

我正在尝试解析来自 apiweather.com 的响应。响应成功,但经过研究,我了解到 Moshi 不解析ArrayLists,因此在此 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 的新手,所以我希望这是一个简单的初学者错误。提前感谢任何解决方案!

标签: androidkotlinarraylistretrofitmoshi

解决方案


推荐阅读