Почему Kotlin не обрабатывает мой список массивов - PullRequest
0 голосов
/ 21 марта 2019

Я получаю данные из json API в моем коде Kotlin.Я могу правильно проанализировать данные на предмет наличия строковых значений, но анализ списка массивов вызывает проблемы.

Мои данные ответа следующие:

{
    "limit": "10",
    "schedule": {
        "0": ["0", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "1": ["1", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "2": ["2", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "3": ["3", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "4": ["4", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "5": ["5", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"],
        "6": ["6", "3.00", "7.59", "9.00", "12.59", "14.00", "22.59"]
    },
    "target_temp": "32.18"
}

Теперь для получения значения, например target_temp, я использую следующеекод успешно

val gson = GsonBuilder().create() 
 val target = gson.fromJson(body, data::class.java)        println(target.target_temp)

и мой код класса прост

class data(val target_temp: String)

Теперь, когда я хочу получить доступ к расписанию, я получаю сообщение об ошибке.

java.lang.IllegalStateException: Ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1 столбца 50 путь $ .schedule

Мой код для получения расписания приведен ниже.

val gson = GsonBuilder().create()
val schedule = gson.fromJson(body, schedule::class.java)
println(schedule.schedule.get(1))

и класс для расписания

class schedule(val schedule: ArrayList<String>)

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Расписание не относится к типу ArrayList<String put относится к типу Map<ArrayList<String>>.

Измените определение расписания на:

class schedule(val schedule: Map<String, ArrayList<String>>)

Полный пример:

val gson = GsonBuilder().create()
val schedule = gson.fromJson(body, schedule::class.java)
println(schedule.schedule.get("0"))
1 голос
/ 21 марта 2019

в вашей модели ответа установите schedule тип переменной Map<String, List<String>> вместо Schedule class object или List<String>

ваша модель ответа будет выглядеть ниже

data class ResponseModel(
   val schedule: Map<String, List<String>>,
   val target_temp: String
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...