Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT (Retrofit 2)

#java #android #retrofit #rxjava


Получаю такую ошибку java.lang.IllegalStateException: Expected BEGIN_ARRAY but was
BEGIN_OBJECT, когда получаю данные с сервера. Чем вызвана эта ошибка? И как ее исправить?  

JSON, который приходит с сервера: 

{
  "group": [
    {
      "name": "Group1",
      "description": "Test Group 1"
    },
    {
      "name": "Group2",
      "description": "Group Name Updated"
    }
  ]
}


Интерфейс API: 

 @GET("groups")
    Observable > getAllGroups(@Header("Authorization") String auth,
                                   @Header("Content-type") String contentType,
                                   @Header("Accept") String accept
                                  );


Метод, в котором получаю данные: 

private void getAllGroups() {
    String group = "Group1";
    String credentials = "admin" + ":" + "admin";
    final String basic =
            "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
    String contentType = "application/json";
    String accept = "application/json";
    Subscription subscription = App.service.getAllGroups(basic, contentType, accept)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(groups -> {
                groupList.addAll(groups);
            }, throwable -> {
                Log.e("All group error", String.valueOf(throwable));
            });

    addSubscription(subscription);
}


Класс Group: 

public class Group {

    private String name;
    private String description;
    private String admins;
    private Member members;

    public Group(String name, String description, String admins, Member members) {
        this.name = name;
        this.description = description;
        this.admins = admins;
        this.members = members;
    }

    public Group(String name, String description) {
        this.name = name;
        this.description = description;
    }
  // getters setters
}

    


Ответы

Ответ 1



Сервер присылает JSONObject, в котором JSONArray, а вы пытаетесь парсить как JSONArray. Должно быть как то так: public class GroupList { ArrayList group; //setters, getters } public class Group { private String name; private String description; ... }

Комментариев нет:

Отправить комментарий