android - 如何仅在Retrofit响应成功时添加GSON CallAdapter Factory

标签 android rx-java rx-android retrofit2

我有一个 REST 服务器,我的问题是每当我的响应不成功时,我想解析响应正文中的错误并将其显示给用户(将错误信息传递给调用 Activity )

@Named("rest_api")
@Singleton
@Provides
Interceptor provideRESTInterceptor(final UserManager userManager) {
    return new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request original = chain.request();
            String token = userManager.getJwt();

            Request request = original.newBuilder()
                    .header("Accept", "application/json")
                    .header("Authorization", "Bearer "+token)
                    .method(original.method(), original.body())
                    .build();

            Log.i(LOG_TAG, "REQUEST URL "+request.uri());
            Response response = chain.proceed(request);

            if(!response.isSuccessful()) {
                // How do i send this error to my Activity.

                APIError apiError = new APIError(response.code(),response.body().string());
            }

            // Customize or return the response
            return response;
        }
    };
}

我正在使用 RxJavaConverter

@Named("rest_api")
@Singleton
@Provides
Retrofit provideRESTRetrofit(@Named("rest_api")OkHttpClient client, Converter.Factory converter, CallAdapter.Factory rxJava) {
    return new Retrofit.Builder()
            .baseUrl(PUBLIC_PRODUCTION_URL)
            .client(client)
            .addCallAdapterFactory(rxJava)
            .addConverterFactory(converter)
            .build();
}

自Retrofit 2.0以来,即使响应不成功,它也会尝试将给定GSON的数据转换为(POJO),从而引发错误,并且我丢失了错误的实际消息。

最佳答案

正如 @david:mihola 建议的那样,它有效,使用 Retrofit Response 对象我能够实现这一目标。

Response<MyObject> response;
if(response.isSucessful) {
   MyObject obj = response.body();
} else {
  // You can process your error message from the reponse
}

它确实让我免于大量手动 GSON 解析

关于android - 如何仅在Retrofit响应成功时添加GSON CallAdapter Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36080833/

相关文章:

java - FragmentStateAdapter 删除最后一个选项卡而不是当前的 ViewPager2

android - 收听 android 中的新任务或 Activity

java - 如何让 RxJava 间隔立即执行 Action

java - 不理解 RxJava MaybeObserver (聊天通知不起作用)

java - 如何在 RxJava 2 中使用 Flowable?

java - 如何在 flatMap 运算符中正确查询?

java - 如何从android中的游标检索数据?

SimonVT menuDrawer 中出现 java.lang.NullPointerException?

android - 可观察的延迟会忽略设备动画设置

java - 是否发出 `onCompleted()` 的性能影响