I设置为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而崩溃
在我注释时,它在行上中断:Response response = chain.proceed(request);。SocketTimeOut是IOException的子类,为什么我的代码不能捕获它。我该如何解决这个问题。
发布于 2017-12-13 12:45:07
使用OkHttpClient进行更多配置,如下所示:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();然后用RetrofitBuilder设置这个okHttpClient,
Retrofit.Builder()
.client(okHttpClient);发布于 2017-12-13 13:16:31
您可以使用改进的回调方法来轻松处理在改进调用过程中发生的异常。它有onResponse()和onFailure()覆盖方法。如果改造调用成功,则将触发onResponse();如果调用失败或发生任何异常,则将触发onFailure()。
您可以参考下面的教程,以获得关于改进回调的更好想法
https://www.journaldev.com/13639/retrofit-android-example-tutorial https://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/
https://stackoverflow.com/questions/47785086
复制相似问题