【问题标题】:Handle Response Kotlin Retrofit处理响应 Kotlin 改造
【发布时间】:2020-12-16 11:06:27
【问题描述】:

我是 Kotlin 和 Android 开发的新手。一直在努力让我的改造 api 工作。
但是在对 SO 进行一些搜索后找到了一种方法。我现在得到数据响应,但我不知道如何“分离”它,以便我可以解决它。

这是我的 json 响应:

"data": [
    {
        "alpha2Code": "PT",
        "name": "Portugal",
        "prefixCode": null,
        "id": "9ba94c99-7362-47c2-f31f-08d87a662921",
        "active": true,
        "created": "2020-10-27T10:50:46.895831"
    }

还有我的模型课

data class Country (
    @SerializedName("alpha2Code")
    val alpha2Code: String?,
    @SerializedName("name")
    val name: String?,
    @SerializedName("id")
    val id: String?,
    @SerializedName("active")
    val active: Boolean,
    @SerializedName("created")
    val created: String?
): Serializable


class Countrys {
    var countrys: List<Country> = emptyList()
}

最后是我的获取数据函数

fun getDataCountry() {
    val call: Call<Countrys> = ApiClient.getClient.getCountries()

    call.enqueue(object : Callback<Countrys> {
        override fun onResponse(call: Call<Countrys>?, response: Response<Countrys>?) {
            // val carResponse = response.body()
            val body = response?.body()
            Log.e("dadosApi2","retorno response: " + body)
        }

        override fun onFailure(call: Call<Countrys>?, t: Throwable) {
            Log.e("dadosApiError","erro no retorno " + t.message)
        }
    })
}

我收到了回复,但我不知道如何展开数据,例如,我可以将所有国家/地区名称添加到 ArrayList

我曾尝试在不使用 Countrys 类的情况下使用 或 Arraylist 来执行此操作,但我的回复中出现错误:

E/dadosApiError: erro no retorno 应为 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT

fun getDataCountry() {
    val call: Call<ArrayList<Country>> = ApiClient.getClient.getCountries()
    call.enqueue(object : Callback<ArrayList<Country>> {

        override fun onResponse(call: Call<ArrayList<Country>>?, response: Response<ArrayList<Country>>?) {
            // val carResponse = response.body()
            val body = response?.body()

            Log.e("dadosApi2","retorno response: " + body)

        }

        override fun onFailure(call: Call<ArrayList<Country>>?, t: Throwable) {
            Log.e("dadosApiError","erro no retorno " + t.message)
        }

    })
}

我之前也尝试过使用 List

【问题讨论】:

    标签: java android json kotlin retrofit2


    【解决方案1】:

    您需要将Countrys 类更改为data class 并像这样为对象countrys 添加SerializedName data

    data class Countrys(@SerializedName("data")var countrys: List<Country>)
    

    然后您可以使用此访问您的数据

    var countryNames = mutableListOf<String>()
    for (country in response?.body().countrys){
      countryNames.add(country.name)
    }
    

    【讨论】:

    • 嗯,这就是我以前的情况,我在处理我的回复时总是出错,然后我看到了一些关于 SO 的答案,由于我的 json 输出,我必须将其更改为现在的方式有。
    • E/dadosApiError: erro no retorno 预期 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT
    • 用当前代码和错误更新你的问题,以便我能正确地帮助你
    • 您是否添加了国家/地区的序列化名称?这是“数据”
    • 我会更新我的答案,如果这解决了您的问题,我认为您应该标记它以供其他人将来帮助他们
    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 2020-09-15
    • 2014-04-18
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    相关资源
    最近更新 更多