Retrofit
ため
Iセットアップ:Retrofit2てSocketTimeoutException
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
のサブクラスなので、なぜ私のコードでそれをキャッチできません。 この問題を解決する方法を教えてください。
こんにちは@EKNについて良いアイデアのためのチュートリアルの下に参照することができます
、私の更新を参照してください。私は、Interceptorを使ってCacheを設定します。ここでonFaildをどのようにキャッチしますか? – phongvan