android - 在将其传递给调用 Activity 之前在 Retrofit 中捕获 http 响应

标签 android retrofit

现在我们正在使用这样的改造:

service.executeSomeRequest(UserPreferenceRequest userPreferenceRequest, new Callback<UserPreferenceResponse>() {
    @Override
    public void success(UserPreferenceResponse responseCallback, Response response) {
        if (responseCallback.getStatus() == ResponseStatus.OK) {
            // Everything is OK, process response
        } else {
            ApiErrorProcessor.process(responseCallback.getError());
        }
    }

    @Override
    public void failure(RetrofitError retrofitError) {
        ServerErrorProcessor.process(retrofitError);
    }
});

但是我们有很多请求,实际上,我们实现的每个请求都需要我们编写相同的错误代码处理(对于 API 和服务器错误),这会重复代码。

我们想要的是只覆盖感兴趣的方法,如果没有提供实现则执行默认实现。

像这样:

service.executeSomeRequest(UserPreferenceRequest userPreferenceRequest, new     
    CustomCallback<UserPreferenceResponse>() {
            @Override
            public void success(UserPreferenceResponse responseCallback, Response response) {
                super.success(responseCallback, response);
                // Everything is OK, process response
            }
    });

CustomCallback 将处理 API 和服务器错误,如果一切正常,然后才将结果传递给调用 Activity 。

在构建 RestAdapter 时,有 setRequestInterceptor(); 允许我在发出请求之前捕获请求,我在想类似的东西,比如 setResponseInterceptor (),这将允许我在将响应传递给 Activity 之前捕获响应并处理那里的一般错误,但没有找到类似的东西。

最佳答案

您的自定义回调可以先在基类中处理响应,然后委托(delegate)给抽象方法。

public interface StatusResponse {
  Status getStatus();
}

public abstract class CustomCallback<T extends StatusResponse> implements Callback<T> {
  @Override public final void success(T data, Response response) {
    if (data.getStatus() == Status.OK) {
      success(data);
    } else {
      // Handle error..
    }
  }

  public abstract void success(T data);
}

关于android - 在将其传递给调用 Activity 之前在 Retrofit 中捕获 http 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23383203/

相关文章:

android - 使用 RxJava 链接 Retrofit 调用并返回主对象

android - 改造和 reddit api 问题

android自定义位图覆盖与mapsforge

android - 如何获取 Eclipse 的 JRE 文件?

android - 如何在 Android 中将 Activity 的 Root View 设置为 fragment ?

android - 如何在 fragment 构造函数中获取父 Activity 引用?

java - 来自 ok Retrofit 响应的图像的空模型

java - onKeyDown 仅使用退格键触发

android - Robolectric + OkHttp + 改造 + rxJava 单元测试

android - 使用 Retrofit + Kotlin Flow 处理错误的优雅方式