Retrofit вылетает и выдает ошибку Android

240
24 июля 2017, 13:22

Всем привет. Я собрал модель ModelConfig. По Json. Параметр langs имеет массив из 2 объектов, мне приходит 2 запрос с langs у которого пустой массив. В итоге я получаю ошибку. Сервер сам решает когда присылать пустой массив, а когда заполенный. В любом случае ему должно быть все равно что за массив приходит. Но в итоге я получаю ошибку

Error

 java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line column path $.response.design.langs

Моя модель.

  public class ModelConfig {
    @SerializedName("code") public int code;
    @SerializedName("status") public String status;
    @SerializedName("response") public ResponseBean response;
    public static class ResponseBean {
        @SerializedName("portal_code") public String portalCode;
        @SerializedName("design") public DesignBean design;
        @SerializedName("portal_id") public String portalId;
        @SerializedName("appColorScheme") public AppColorSchemeBean appColorScheme;
        public static class DesignBean {
            @SerializedName("logo") public String logo;
            @SerializedName("langs") public List<String> langs;
        }
        public static class AppColorSchemeBean {
            @SerializedName("slide_menu") public String slideMenu;
            @SerializedName("slide_menu_color") public String slideMenuColor;
            @SerializedName("app_buttons") public String appButtons;
            @SerializedName("app_buttons_color") public String appButtonsColor;
        }
    }
}

вот так выглядит текущий Json.

**Если приходит такой Json ошибок НЕТ.

  {
    "code": 200,
    "status": "OK",
    "response": {
        "design": {
            "logo": "logo-en.png",
            "favicon": "favicon.ico",
            "langs": {
                "logo-en": "logo-en.png",
                "logo-ar": "logo-ar.png"
            }
        },
        "appColorScheme": {
            "slide_menu": "#f3f4f3",
            "slide_menu_color": "#454545",
            "app_buttons": "#280091",
            "app_buttons_color": "#ffffff"
        }
    }
}

**ЕСЛИ ПРИХОДИТ ТАКОЙ JSON Без langs то я получаю ошибку

{
    "code": 200,
    "status": "OK",
    "response": {
        "design": {
            "logo": "logo-en.png",
            "favicon": "favicon.ico",
            "langs": { }
        },
        "appColorScheme": {
            "slide_menu": "#f3f4f3",
            "slide_menu_color": "#454545",
            "app_buttons": "#280091",
            "app_buttons_color": "#ffffff"
        }
    }
}

Код который использую из этой модели

   Constants.BACKGROUND_NAVIGATION_MENU_COLOR = modelConfig.response.appColorScheme.slideMenu;
                    Constants.BACKGROUND_BUTTON_EDIT_COLOR = modelConfig.response.appColorScheme.appButtons;
                    Constants.TEXT_NAVIGATION_MENU_COLOR = modelConfig.response.appColorScheme.slideMenuColor;
                    Constants.TEXT_BUTTON_EDIT_COLOR = modelConfig.response.appColorScheme.appButtonsColor;
                    Constants.LOGO_PNG_PORTALS = modelConfig.response.design.logo;
                    Constants.PORTAL_ID = modelConfig.response.portalId;
                    Constants.PORTAL_NAME = modelConfig.response.portalCode;
                    StringBuilder strLangShort = new StringBuilder();
                for (int i = 0; i < modelConfig.response.design.langs.size(); i++) {
                    strLangShort.append(modelConfig.response.design.langs.get(i)).append(",");
                }

Model создавал через ConverterGson Плагин Android studio

Вопрос

Как правильно создать модель или Какие настройки сделать в Retrofit, чтобы программа игнорировала ошибку. И если приходит пустой langs то Модель все равно собралась.

GSON Конвертер Android studio создает модель так без Map

public static class DesignBean {
            @SerializedName("logo") public String logo;
            @SerializedName("favicon") public String favicon;
            @SerializedName("langs") public LangsBean langs;
            @SerializedName("certificate") public String certificate;
            public static class LangsBean {
                @SerializedName("logo-en") public String logoen;
                @SerializedName("logo-ar") public String logoar;
            }
        }
READ ALSO
Обработчик двойного нажатия(через onTouch())

Обработчик двойного нажатия(через onTouch())

В onTouch() нужно задать действие при одном нажатии(что сделать легко) и при двух быстрых нажатиях(желательно, чтобы можно было задать максимальный...

279
Не отображаются картинки на странице JSP

Не отображаются картинки на странице JSP

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

227
Захват входящего номера

Захват входящего номера

Есть ли возможность на Android 40

216