Обработка ответа Kotlin дооснащение

#java #android #json #kotlin #retrofit2

#java #Android #json #kotlin #Дооснащение 2

Вопрос:

Я новичок в разработке 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)
        }
    })
}
 

Я получаю ответ, но я не знаю, как развернуть данные, чтобы я мог, например, добавить все названия стран в an ArrayList .

Я пытался сделать это без класса Countrys, используя <List> или Arraylist, но я получаю сообщение об ошибке в своем ответе:

Ошибка / dadosApiError: ошибка не ожидала, что retorno ожидал BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1, столбец 2, путь $

 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 класс на a 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)
}
 

Комментарии:

1. Ну, это то, что у меня было раньше, и я всегда получал сообщение об ошибке при обработке моего ответа, затем я увидел несколько ответов, так что мне нужно изменить его так, как у меня есть сейчас, из-за вывода json, который у меня есть.

2. Ошибка / dadosApiError: ошибка не ожидала, что retorno ожидал BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1, столбец 2, путь $

3. обновите свой вопрос текущим кодом и ошибкой, чтобы я мог вам правильно помочь

4. вы добавили сериализованное имя для стран? что такое «данные»

5. я обновлю свой ответ, и если это решит вашу проблему, я думаю, вам следует пометить его для других, чтобы помочь им в будущем