gpt4 book ai didi

android - Retrofit2 SocketTimeOutException

转载 作者:太空狗 更新时间:2023-10-29 16:27:14 27 4
gpt4 key购买 nike

我为 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); 正如我评论的那样。SocketTimeOutIOException 的子类,为什么我的代码无法捕获它。我该如何解决这个问题。

最佳答案

使用 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);

关于android - Retrofit2 SocketTimeOutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47785086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com