您可以在底层 HTTP 客户端上设置超时。如果您不指定客户端,Retrofit 将创建一个具有默认连接和读取超时的客户端。要设置自己的超时时间,您需要配置自己的客户端并将其提供给RestAdapter.Builder。
一个选项是使用同样来自 Square 的 OkHttp 客户端。
1.添加库依赖
在 build.gradle 中,包含以下行:
compile 'com.squareup.okhttp:okhttp:x.x.x'
x.x.x 是所需的库版本。
2。设置客户端
例如,如果您想设置 60 秒的超时,请在版本 2 之前的 Retrofit 和版本 3 之前的 Okhttp 执行此操作(对于较新的版本,请参阅编辑):
public RestAdapter providesRestAdapter(Gson gson) {
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(60, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(60, TimeUnit.SECONDS);
return new RestAdapter.Builder()
.setEndpoint(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.setClient(new OkClient(okHttpClient))
.build();
}
编辑 1
对于3.x.x 以后的 okhttp 版本,您必须这样设置依赖关系:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
并使用构建器模式设置客户端:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
更多信息Timeouts
编辑 2
自2.x.x 以来的改造版本也使用构建器模式,因此将上面的返回块更改为:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
如果使用像我的providesRestAdapter 方法这样的代码,则将方法返回类型更改为Retrofit。
更多信息Retrofit 2 — Upgrade Guide from 1.9
ps:如果你的minSdkVersion大于8,可以使用TimeUnit.MINUTES:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
有关单位的更多详细信息,请参阅TimeUnit。