簡體   English   中英

處理響應 Kotlin Retrofit

[英]Handle Response Kotlin Retrofit

我是 Kotlin 和 android 開發的新手。 一直在努力讓我的 retrofit 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"
    }

和我的 model class

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()
}

最后我得到數據 function

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中。

我曾嘗試在沒有 class 國家/地區的情況下使用 <List> 或 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

您需要將Countrys class 更改為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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM