I setup for Retrofit:
@Override
Request request = chain.request();
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
Response response = chain.proceed(request); //Exception here
String cacheControl = request.cacheControl().toString();
response = response.newBuilder()
.removeHeader(“Pragma”)
.removeHeader(“Cache-Control”)
.header(“Cache-Control”, cacheControl)
.build();
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;
}
};
And I use to setup cache:
builder = new OkHttpClient.Builder()
.cookieJar(new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(Apploader.context)))
.addNetworkInterceptor(interceptor)
.addInterceptor(interceptor)
.cache(cache)
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
Sometime when server response too long My Application crash because SocketTimeOut
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.
解决方案
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();
and then set this okHttpClient with RetrofitBuilder,
Retrofit.Builder()
.client(okHttpClient);
今天的文章 retrofit2设置超时,Retrofit2 SocketTimeOutException分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/115918.html