java - OkHttp 拦截器为空
问题描述
我有这个类来创建一个服务retrofit2
:
public class ServiceGenerator {
private static Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(UrlProvider.BASE_URL)
.addConverterFactory(GsonConverterFactory.create());
private static Retrofit retrofit = builder.build();
private static HttpLoggingInterceptor.Level logLevel = BuildConfig.DEBUG ?
HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE;
private static HttpLoggingInterceptor logging =
new HttpLoggingInterceptor().setLevel(logLevel);
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
public static <S> S createService(Class<S> serviceClass) {
if (!httpClient.interceptors().contains(logging)) {
httpClient.addInterceptor(logging);
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.header("HEADER_USER_AGENT", "USER_AGENT")
.method(original.method(), original.body())
.build();
return chain.proceed(request);
}
});
httpClient.authenticator(new TokenAuthenticator());
builder.client(httpClient.build());
retrofit = builder.build();
}
return retrofit.create(serviceClass);
}
}
我在崩溃报告中收到此错误:
java.lang.IllegalStateException: Null interceptor: [null, okhttp3.logging.HttpLoggingInterceptor@85a6f78, *.*.*.e.c@1f1feb6, *.*.*.e.c@66917b7]
at java.lang.Thread.run(Thread.java:764)
at *.*.*.S.run
at *.*.*.Y.a
at *.*.*.Y.e
at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:1040)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:283)
在某些设备和特殊情况下会发生此错误。从不同线程
调用方法的概率。
ExecuterService 对我们有帮助吗?
如何修复此错误?请帮帮我。createService
解决方案
推荐阅读
- c# - 2D Ricochet Physics 在 Unity 中不起作用
- javascript - 视频未按照 CSS 中设置的位置显示
- arduino - 如何在arduino上停止循环
- node.js - App Engine Flexible cron 在 120 秒后终止
- c# - Windows IoT 树莓派上的 ASP.NET MVC 无法连接到 SQL 数据库
- c# - 允许用户只输入字符串作为答案
- javascript - 为什么我会因为这个 Javascript 函数而失去利润
- angular - 在 mat-select 中设置默认选项
- html - HTML 背景不透明度不影响前景
- sql - 删除 SQL 中的重复行