Ошибка при подбрасывании Ожидается BEGIN_OBJECT, но был BEGIN_ARRAY Из массива в список? - PullRequest
0 голосов
/ 05 ноября 2018

Привет, у меня проблемы с анализом некоторых json. Я посмотрел на некоторые другие решения Stackoverflow, но мне не повезло с моей проблемой. Я пытаюсь получить простой recyleview для работы. Будем благодарны за любые предложения.

Тип файла Json

[
  {
    "name": "Javi",
    "birthdate": "2018-10-17T00:00:00",
    "id": 25
  },

Интерфейс

public interface UsuariosInterface {

@GET("User")
    Call<ArrayList<UsuariosRespuesta>> obtenerListaUsuarios();
}

Отдельный интерфейс

public class UsuariosRespuesta {

private ArrayList<Usuarios> results;


public ArrayList<Usuarios> getResults() {
    return results;
}

public void setResults(ArrayList<Usuarios> results) {
    this.results = results;
}}

Модель

public class Usuarios {

private String name;
private String birthdate;
    private Integer id;
}

Способ запроса

  UsuariosInterface service = retrofit.create(UsuariosInterface.class);
    Call<ArrayList<UsuariosRespuesta>> usuariosRespuestaCall= service.obtenerListaUsuarios();

    usuariosRespuestaCall.enqueue(new Callback<ArrayList<UsuariosRespuesta>>() {
        @Override
        public void onResponse(Call<ArrayList<UsuariosRespuesta>> call, Response<ArrayList<UsuariosRespuesta>> response) {

            if (response.isSuccessful()) {

                UsuariosRespuesta usuariosRespuesta = response.body();
                ArrayList<Usuarios> listaUsuarios = usuariosRespuesta.getResults();

Ошибка:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

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

1 Ответ

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

если вы получаете прямой список без каких-либо ключей, просто передайте список в вашем интерфейсе, как

@GET("User")
Call<UsuariosRespuesta> obtenerListaUsuarios();

но вы получаете целый объект без ключа, так как вы делаете ответ должен быть таким {{{}, {}, {}, ..... {}]}

 @GET("User")
   Call<UsuariosRespuesta> obtenerListaUsuarios();}

вышеупомянутая ситуация нужна, когда ваши данные поступают вот так

{ [{ }, { } ] } верхний объект refrtence это UsuariosRespuesta, но вы получаете массив [{}, {}, {} ...] без ключа, тогда в ответ требуется Arraylist.

и сериализовал ваш POJO тоже.

    public class Usuarios {
@field:SerializedName("name")
private String name;
@field:SerializedName("birthdate")
private String birthdate;
@field:SerializedName("id")
    private Integer id;
}
...