Retrofit2 SocketTimeOutException [英] Retrofit2 SocketTimeOutException
本文介绍了Retrofit2 SocketTimeOutException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我为Retrofit
设置了:
private Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!NetworkUtil.isNetworkAvailable()) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
Response response = chain.proceed(request); //Exception here
if (NetworkUtil.isNetworkAvailable()) {
String cacheControl = request.cacheControl().toString();
response = response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", cacheControl)
.build();
} else {
int maxStale = 60 * 60 * 24 * 7;
response = response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
.build();
}
return response;
}
};
我用来设置缓存:
builder = new OkHttpClient.Builder()
.cookieJar(new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(Apploader.context)))
.addNetworkInterceptor(interceptor)
.addInterceptor(interceptor)
.cache(cache)
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
有时服务器响应时间过长,我的应用程序由于SocketTimeOut
Sometime when server response too long My Application crash because SocketTimeOut
它在以下地方中断:Response response = chain.proceed(request);
.
SocketTimeOut
是IOException
的子类,为什么我的代码无法捕获它.
我该如何解决这个问题.
It break on line: Response response = chain.proceed(request);
as I comment.
SocketTimeOut
is subclass of IOException
, why my code can't catch it.
How do I resolved this problem.
推荐答案
使用OkHttpClient
进行更多配置,例如follwing:
Use OkHttpClient
for more configurations, like follwing :
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
,然后将此okHttpClient
设置为RetrofitBuilder
Retrofit.Builder()
.client(okHttpClient);
这篇关于Retrofit2 SocketTimeOutException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文