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