在重试之间修改请求/可观察

时间:2017-03-02 11:14:41

标签: retrofit rx-java retrofit2

我有rxjava(observable)+ retrofit2一起向我的应用程序发出http请求。我为app创建了一次OkHttpClient,并且不想重新创建它。 我在可观察的级别上实现了重试逻辑 - 使用filter,retryWhen together。 我想要的 - 如果请求从服务器端完成错误,我想重试它并发送额外的标头。 所以,我不明白我怎么能修改observable里面的重试,也不知道如何从拦截器级别获取有关observable的知识。 关于可能方法的任何想法和/或知识?

1 个答案:

答案 0 :(得分:0)

您需要创建自己的Interceptor实现,您可以在其中设置标头逻辑。像

这样的东西
public class FallbackInterceptor implements Interceptor {
  static String header1Key = "key1";
  static String extraHeaderKey = "key2";
  String header1, extraHeader;
  boolean useextraheader = false;

  public FallbackInterceptor(string header1, string extraheader) {
    this.header1 = header1;
    this.extraheader = extraheader;

  }

  public void setUseExtraHeader(boolean useextraheader) {
    this.userextraheader = useextraheader;
  }

  @Override 
  public Response intercept(Interceptor.Chain chain) throws IOException {
    Request original = chain.request();
    // Add request headers
    Request.Builder requestBuilder = original.newBuilder().header(header1Key, header1);
    if (useExtraHeader) {
        requestBuilder = requestBuilder.header(extraHeaderKey, extraHeader)
    }
    Request newRequest = requestBuilder.method(original.method(), original.body())
                                       .build();
    // Return the response
    return chain.proceed(request);
  }
}

将此添加到okhttpclient并让您的改造实例使用此功能。然后,您可以在重试逻辑中操作extraheader标志。