У меня есть этот класс для создания службы с 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)
Эта ошибка возникает на некоторых устройствах и вособый случай.
Вероятность вызова createService
метода из другого потока.
Помогает ли нам ExecuterService?
Как исправить эту ошибку?помогите мне, пожалуйста.