在将其传递给调用活动之前,在Retrofit中捕获http响应

And*_*Res 8 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);
    }
});
Run Code Online (Sandbox Code Playgroud)

但是我们有很多请求,实际上,我们实现的每个请求都要求我们编写相同的错误代码处理(对于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
            }
    });
Run Code Online (Sandbox Code Playgroud)

CustomCallback会照顾API和服务器错误的,如果一切正常,然后才将结果传递给调用活动.

在构建RestAdaptersetRequestInterceptor();,让我发出之前赶上要求,我想的是类似的东西,比如setResponseInterceptor(),这将让我将它传递给活动之前赶上响应和治疗有一般性错误,但没有找到相似的东西.

Jak*_*ton 10

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

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);
}
Run Code Online (Sandbox Code Playgroud)