Ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT по пути $ - PullRequest
0 голосов
/ 07 марта 2020

Интерфейс

Json файл выглядит так

Ошибка

Попытка получить эти

interface StationService {
    @GET("/bus/nearstation/latlon/[lat]/[lon]/[distance].json")
    suspend fun getStationData(): Response<List<Station>>
}

.

После изменений в ответе 1:

for (station in it) {
                stationNames.append(station.street_name)
                    .append("\n")
            }

Получение этой ошибки в MainFragment.kt: For-l oop диапазон должен иметь метод 'iterator ()'

1 Ответ

0 голосов
/ 07 марта 2020

Основываясь на структуре ответа, вам нужно иметь Класс обтекания List<Station>: применить следующие изменения:

    data class ResponseData(
         @SerializedName("data") val data: NearestStation
    )

    data class NearestStation(
         @SerializedName("nearststations") val nearestStations: List<Station>
    )  

Где станция - тот же класс данных, который у вас есть сейчас. Теперь измените сервис модернизации следующим образом:

    interface StationService {
    @GET("/bus/nearstation/latlon/[lat]/[lon]/[distance].json")
         suspend fun getStationData(): Call<ResponseData>
    }

Почему? Объект root в объекте JSON состоит из двух полей: code типа String (обойдено из примера) и data, который является объектом, состоит из одного поля с именем neareststations, которое является списком станций. вам нужно следовать той же структуре объекта в вашей модели класса данных.

--- Редактировать:

Вам необходимо изменить следующее в своем коде:

Если вы внесли изменения, о которых я упоминал, в ваш сервис по модернизации, вам нужно изменить тип

val stationData = MutableLiveData<List<Station>>()

на

val stationData = MutableLiveData<ResponseData>()

и изменить

val serviceData = service.getStationData().body()

на

val serviceData = service.getStationData().execute().body()
```.

Pay attention that ```serviceData`` is from type  ```ResponseData``` not ```List```  So replace ```?: emptyList()``` with mocked ```ResponseData``` 

...