pho*_*van 8 android socket-timeout-exception retrofit2
我设置为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;
}
};
Run Code Online (Sandbox Code Playgroud)
我用来设置缓存:
builder = new OkHttpClient.Builder()
.cookieJar(new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(Apploader.context)))
.addNetworkInterceptor(interceptor)
.addInterceptor(interceptor)
.cache(cache)
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
有时服务器响应时间过长我的应用程序崩溃,因为 SocketTimeOut
它在线中断: Response response = chain.proceed(request); 正如我评论的那样。
SocketTimeOut是 的子类IOException,为什么我的代码无法捕获它。我如何解决这个问题。
小智 4
用于OkHttpClient更多配置,如下所示:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
Run Code Online (Sandbox Code Playgroud)
然后okHttpClient用 进行设置RetrofitBuilder,
Retrofit.Builder()
.client(okHttpClient);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2626 次 |
| 最近记录: |