您可以在底层的HTTP客户端上设置超时时间。如果您没有指定客户端,Retrofit将创建一个默认连接和读取超时时间的客户端。要设置自己的超时时间,您需要配置自己的客户端并将其提供给RestAdapter.Builder
。
一个可选方案是使用Square提供的OkHttp客户端。
1. 添加库依赖项
在build.gradle中,包含以下行:
compile 'com.squareup.okhttp:okhttp:x.x.x'
其中x.x.x
是所需库的版本。
2. 设置客户端
例如,如果您想设置60秒的超时时间,在Retrofit 2之前和Okhttp 3之前这样做(对于更新版本,请参见编辑部分):
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
版本开始,您需要以这种方式设置依赖关系:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
使用构建器模式设置客户端:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
更多信息请参见超时
编辑2
2.x.x
以后的Retrofit版本也使用了构建器模式,因此将上面的返回块更改为:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
如果使用像我的
providesRestAdapter
方法一样的代码,则将该方法的返回类型更改为
Retrofit。
有关更多信息,请参见Retrofit 2 ——从1.9升级指南
附:如果您的minSdkVersion大于8,可以使用TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
有关单位的更多详细信息,请参见TimeUnit。
gson
对象是从哪里获取的?我按照教程走到了这一步,使用RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(url).build();
创建了RestAdapter
。但是我的类中没有任何Gson
对象,尽管我已经在项目中包含了 gson 和 converter-gson 库。 - Solacepublic Gson providesGson() { return new GsonBuilder().create(); }
. 所以我做了这个:Gson gson = module.providesGson(); RestAdapter adapter = module.providesRestAdapter(gson);
。其中,module是一个合适的类的实例,该类拥有所有这些方法。 - androidevilcompile 'com.squareup.okhttp3:okhttp:3.x.x'
,就像Teo在下面的答案中所示。 - NineToeNerd