我在应用程序中使用了Retrofit个库,我想设置一个60秒的超时. retrofit 有办法做到这一点吗?
我这样设置Retrofit:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.build();
如何设置超时?
我在应用程序中使用了Retrofit个库,我想设置一个60秒的超时. retrofit 有办法做到这一点吗?
我这样设置Retrofit:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.build();
如何设置超时?
可以在底层HTTP客户端上设置超时.如果您没有指定客户端,改型将创建一个具有默认连接和读取超时的客户端.要设置自己的超时,您需要配置自己的客户端并将其提供给RestAdapter.Builder
.
一个选项是使用同样来自Square的OkHttp客户端.
1. Add the library dependency个
在建造中.gradle,包括这一行:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Where 100 is the desired library version.
2. Set the client
例如,如果要将超时设置为60秒,请在版本2之前的改装和版本3之前的Okhttp(FOR THE NEWER VERSIONS, SEE THE EDITS)中这样做:
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();
}
EDIT 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
EDIT 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
注:如果你的Minsdk版本大于8,你可以使用TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
有关单元的更多详细信息,请参见TimeUnit.