Ожидаемый BEGIN_ARRAY, но ошибка BEGIN_OBJECT с gson, android, дооснащением - PullRequest
0 голосов
/ 14 мая 2019

Привет! Я пытаюсь получить данные из API и получаю следующую ошибку:

Ожидается BEGIN_ARRAY, но было BEGIN_OBJECT

Данные, которые я получаювыглядит следующим образом:

 "code": "01",
    "data": {
        "code": "0",
        "time": "14-05-2019 16:22:28.661",
        "data": [
            {
                "geometry": {
                    "BoundingBox": null,
                    "ExtraMembers": null,
                    "Type": 7,
                    "Coordinates": {
                        "Latitude": 40.401609,
                        "Values": [
                            -3.674735,
                            40.401609
                        ],
                        "Longitude": -3.674735
                    },
                    "CoordinateReferenceSystem": null
                }
            },
            {
                "geometry": {
                    "BoundingBox": null,
                    ....

И вот что pojo для получения этих данных:

public class ApiResponse<T extends ApiResponseData> {
    ...   
    @SerializedName("data")
    @Expose
    private List<T> data;
    ...
}

public class DData implements ApiResponseData {
...

И вызов модернизации для получения данных следующий:

public void getListOfDs(final MutableLiveData<ApiResponse<DData>> data) {
        Call<ApiResponse<DData>> call = CApiInterface.getListOfDs(ID_CLIENT);
        call.enqueue(new Callback<ApiResponse<DData>>() {
            @Override
            public void onResponse(Call<ApiResponse<DData>> call, Response<ApiResponse<DData>> response) {
                ApiResponse<DData> apiResponse = response.body();
                data.setValue(apiResponse);
            }

            @Override
            public void onFailure(Call<ApiResponse<DData>> call, Throwable t) {
                data.setValue(createFailedResponse());
                call.cancel();
            }
        });
    }

Вопрос в том, почему я получаю эту ошибку, в ApiResponse У меня есть Список в этом случае Список, и я получаю список DData, для другого случая, например, ответом является только один DDataэта работа прекрасно, любая идея?

Любая идея, что, как это можно решить?

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Клавиша «Данные» дважды, одна сверху - тип объекта, но она должна быть типа list / Array. Ваш ответ должен быть в скобках [] в настоящее время {} представляет объект Json, а не список.

См. Это, чтобы понять разницу между JSONArray и JSONObject. Разница между JSONObject и JSONArray

1 голос
/ 14 мая 2019

Вы пытаетесь десериализовать объект данных в виде списка, но первые «данные» в иерархии - это объект, который вызывает исключение.Вам нужно пересмотреть свой класс Pojo, чтобы соответствовать структуре Json.

Может быть, что-то подобное может работать:

public class ApiResponse<T extends ApiResponseData> {
    ...
    @SerializedName("data")
    @Expose
    private Data<T> data;
    ...
}

public class Data<T extends ApiResponseData>  {

    @SerializedName("code")
    @Expose
    private String code;

    @SerializedName("time")
    @Expose
    private String time;

    @SerializedName("data")
    @Expose
    private List<T> data;

    ...
}
...