Я новичок в разработке 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, используя <List> или Arraylist, но я получаю сообщение об ошибке в своем ответе:
E/dadosApiError: erro no 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)
}
})
}
Я также пытался ранее со списком




вам нужно будет изменить класс Countrys на data class и добавить SerializedNamedata для объекта countrys вот так
data class Countrys(@SerializedName("data")var countrys: List<Country>)
то вы можете получить доступ к своим данным с помощью этого
var countryNames = mutableListOf<String>()
for (country in response?.body().countrys){
countryNames.add(country.name)
}
E/dadosApiError: erro no retorno Ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1 столбца 2 пути $
это просто разница в типе объекта, если List у вас не работает, попробуйте ArrayList
вы также должны отредактировать свой вопрос, включив в него ошибку и указав строку, в которой это происходит.
я пропустил это, кстати, если вы делаете ответ?.body(), это не сработает, так как вы все еще используете страны, вам придется использовать это сейчас, чтобы получить доступ к ответу данных?.body().countrys
Я пробую эти предложения, но до сих пор не решил свою проблему. Продолжайте получать ту же ошибку, когда я прекращаю использовать класс Countrys
обновите свой вопрос с текущим кодом и ошибкой, чтобы я мог помочь вам правильно
когда вы сказали изменить ответ?.body().countries, я не могу получить к нему доступ.
установите Countrys как класс данных, как и этот класс данных Countrys (var countrys: List<Country>) и повторите попытку.
после этого теперь ответ нулевой
Вы добавили сериализованное название для стран? что такое "данные"
да, вы правы, спасибо за вашу помощь. Очень признателен!
я обновлю свой ответ, и если это решило вашу проблему, я думаю, вы должны отметить это, чтобы другие могли помочь им в будущем.
Ну, это то, что у меня было раньше, и я всегда получал ошибку при обработке моего ответа, затем я видел некоторые ответы на SO, которые я должен изменить на то, что у меня есть сейчас, из-за вывода json, который у меня есть.