我在我的应用程序中使用Retrofit库,我想将超时设置为60秒。改装有某种方法可以做到这一点吗?
我以这种方式设置Retrofit:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.build();
如何设置超时时间?
您可以在基础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
对于以来的okhttp版本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
也使用了构建器模式,因此将上面的return块更改为:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
如果使用类似我的providesRestAdapter
方法的代码,则将方法返回类型更改为Retrofit。
Retrofit 2-从1.9升级指南中的 更多信息
ps:如果您的minSdkVersion大于8,则可以使用TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
有关单位的更多详细信息,请参见TimeUnit。
我这样设置改型: 如何设置超时?
问题内容: 我在Android中使用Retrofit来发送请求并接收响应,但是当我想要转换来自服务器的响应时总是遇到问题: 当服务器的响应应该给我电影列表时,我需要将所有这些电影都放在列表中。 (型号类别): 类: 组态: UserDeserializer: 杰森(回应): 问题答案: 您甚至不需要在此处制作自定义解串器。 完全摆脱它,这是不需要的。您的查询返回的是电影列表,因此请对实际读取电影列
问题内容: 我org.springframework.ws.client.core.WebServiceTemplate用于拨打Web服务。如何为通话配置超时。 问题答案: 如果你使用的是Spring Webservices 2.1.0版本,则可以使用HttpComponentsMessageSender设置超时。 Spring不推荐使用CommonsHttpMessageSender,因此不再推
我正在尝试在我的WebClient上设置超时,以下是当前代码: 我需要添加超时和池策略,我在想这样的事情: 但是我不知道如何在我的webclient中设置httpClient
但我想要的是这样的