Retrofit2 GsonConverter Ожидается BEGIN_OBJECT, но он был BEGIN_ARRAY в строке 1, путь 2 столбца $ - PullRequest
0 голосов
/ 23 ноября 2018

Я встретил некоторую проблему.Я пытаюсь получить данные с сервера, как это ..

{
"Message": "",
"StatusCode": 0,
"Payload": [
    [

        {

        },
        {

        }
    ],
    [
        {

        },
        {

        }
    ]
]

}

Мой BaseResponse ...

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

@SerializedName("StatusCode")
@Expose
private int StatusCode;

@SerializedName("Payload")
@Expose
private T Payload;

public String getMessage() {
    return Message;
}

public int getStatusCode() {
    return StatusCode;
}

public T getPayload() {
    return Payload;
}

Мой мой модифицированный интерфейс...

 @Multipart
@POST(APIServer.Tstgen.POST)
Observable<BaseResponse<List<List<MoneyResponse>>>> getMoneyMainResult(
        @PartMap Map<String, RequestBody> requestBodyMap
);

Я думаю, что все в порядке, но ... при конвертации в Gson всегда происходит ошибка ...

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Ожидается BEGIN_OBJECT, но был BEGIN_ARRAY в строке 1, путь 2 столбца $

что не так с моим кодом?

Ответы [ 5 ]

0 голосов
/ 26 ноября 2018

кроме ответов, приведенных выше ... также перепроверьте URL-адрес веб-службы ... эта ошибка также возникает из-за неправильного URL-адреса

0 голосов
/ 23 ноября 2018
@SerializedName("Message")
@Expose
private String Message;

@SerializedName("StatusCode")
@Expose
private int StatusCode;

@SerializedName("Payload")
@Expose
private Object Payload;

public String getMessage() {
    return Message;
}

public int getStatusCode() {
    return StatusCode;
}

public T getPayload() {
    return Payload;
}

попробуйте использовать объект вместо универсального.Так как Object является супертипом всех типов, то вы можете набирать его.

0 голосов
/ 23 ноября 2018

Установить полезную нагрузку в список, как показано ниже

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

@SerializedName("StatusCode")
@Expose
private int StatusCode;

@SerializedName("Payload")
@Expose
private List<Payload> Payload;

public String getMessage() {
return Message;
}

public int getStatusCode() {
return StatusCode;
}

public List<Payload> getPayload() {
return Payload;
}

 public  setPayload(List<Payload> payload) {
 this.payload=payload;
 }
0 голосов
/ 23 ноября 2018

Вы должны изменить поле типа Payload в вашем Базовом репозитории , как показано ниже:

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

для более глубокого понимания документации по модернизации, это Ссылка полезна.

0 голосов
/ 23 ноября 2018

измените класс ответа и добавьте ваш класс полезной нагрузки в список.

 @SerializedName("Payload")
 private List<Payload> payloadList;

make getter setter method

...