Как автоматически отобразить карту ошибок с помощью фабрики каверов? - PullRequest
3 голосов
/ 11 февраля 2020

Я использую дооснащение для извлечения некоторых данных с удаленного сервера. Если для ответа код ответа отличается от 200, тело возвращается как null. В этом случае я обнаружил, что должен получить свой результат из response.errorBody(), но он, конечно, вернулся в необработанной форме JSON, в любом случае есть ли возможность сопоставить его автоматически с помощью GsonConverterFactory что я включил в свой экземпляр Retrofit?

mApiServices.register(builder.build()).enqueue(new Callback<LoginModel>() {
        @Override
        public void onResponse(Call<LoginModel> call, Response<LoginModel> response) {
            if (response.code() == 200 && response.body() != null && response.body().getStatus() == 1) {
                LoginModel.Data data = response.body().getData();
                mDataLiveData.setValue(data);
                saveToSharedPref(data);
            } else {
                String errorBody = null;
                try {
                    errorBody = response.errorBody().string();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            resetIsLoading();
        }

        @Override
        public void onFailure(Call<LoginModel> call, Throwable t) {
            mGeneralError.setValue(t.getMessage());
            resetIsLoading();
        }
    });

И вот как я создал экземпляр экземпляра Retrofit

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request().newBuilder().addHeader("lang", PreferenceUtils.getLocaleKey(context)).build();
            return chain.proceed(request);
        }
    }).build();

    retrofit = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();
    return retrofit; 
...