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)
}
})
}
私も以前にリストで試しました
関連した質問
変更する必要があります
Countrys
クラスにdata class
を追加しますSerializedName
data
オブジェクトのcountrys
このような次に、これを使用してデータにアクセスできます