OkHttpClient升级到OkHttp3后抛出exception

我正在使用下面的代码行来添加一个默认的头到我使用Retrofit2发送的所有请求中:

private static OkHttpClient defaultHttpClient = new OkHttpClient(); static { defaultHttpClient.networkInterceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request().newBuilder() .addHeader("Accept", "Application/JSON").build(); return chain.proceed(request); } }); } 

升级改造为beta-3版本后,我不得不将OkHttp升级到OkHttp3(实际上我只是将包名从okhttp更改为okhttp3,库包含在改进版中)。 之后,我从这一行中得到例外:

 defaultHttpClient.networkInterceptors().add(new Interceptor()); 

由java.util.Collections中的java.lang.UnsupportedOperationException引起$ UnmodifiableCollection.add(Collections.java:932)


引起:java.lang.ExceptionInInitializerError


这里有什么问题?

Solutions Collecting From Web of "OkHttpClient升级到OkHttp3后抛出exception"

如果要创buildOkHttp(3)客户端对象,则必须使用构build器。

尝试改变这一点:

 private static OkHttpClient defaultHttpClient = new OkHttpClient(); 

像这样的东西:

  OkHttpClient defaultHttpClient = new OkHttpClient.Builder() .addInterceptor( new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request request = chain.request().newBuilder() .addHeader("Accept", "Application/JSON").build(); return chain.proceed(request); } }).build(); 
 compile 'com.squareup.retrofit2:retrofit:2.1.0' compile "com.squareup.retrofit2:converter-gson:2.1.0" compile "com.squareup.retrofit2:adapter-rxjava:2.1.0" compile 'com.squareup.okhttp3:logging-interceptor:3.4.0' 

你应该使用这些版本。 只要把它们, 同步你的gradle ,删除所有导入,然后再试一次。

 import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory;