OkHttpClient升级到OkHttp3
问题描述:
我使用的代码下面几行默认的标题添加到所有发送我的请求使用Retrofit2后抛出异常:OkHttpClient升级到OkHttp3
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);
}
});
}
升级改造,以β-3版本后,我有也将OkHttp升级到OkHttp3(实际上,我只是将包名从okhttp更改为okhttp3,库包含在改进版中)。从那以后,我得到异常从这条线:在java.util.Collections中的$ UnmodifiableCollection.add(Collections.java:932)
java.lang.UnsupportedOperationException :
defaultHttpClient.networkInterceptors().add(new Interceptor());
引起
产生的原因:java.lang.ExceptionInInitializerError
这里有什么问题?
答
如果要创建OkHttp(3)客户端对象,则必须使用构建器。
尝试改变这一点:
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;
+0
这就是我一直在寻找:) – Bawa
好极了!谢谢! –
感谢您的明确解决方案 – bheatcoker
是的。它工作正常。感谢完美的解决方案。 –