bugfix> java > 投稿

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

またはArraylistを使用して、クラスCountriesなしでこれを実行しようとしましたが、応答でエラーが発生します。

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

私も以前にリストで試しました

回答 1 件
  • 変更する必要があります Countrys クラスに data class を追加します SerializedName data オブジェクトの countrys このような

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

    次に、これを使用してデータにアクセスできます

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

あなたの答え