如何在改造库中设置超时?
我正在我的应用程序中使用改造库,并且我想将超时设置为60秒。改造有没有办法做到这一点?
我以这种方式设置改造:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.build();
如何设置超时?
我正在我的应用程序中使用改造库,并且我想将超时设置为60秒。改造有没有办法做到这一点?
我以这种方式设置改造:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.build();
如何设置超时?
您可以在基础 HTTP 客户端上设置超时。如果未指定客户端,则 Retrofit 将创建一个具有默认连接和读取超时的客户端。要设置自己的超时,您需要配置自己的客户端并将其提供给 .RestAdapter.Builder
一种选择是使用OkHttp客户端,也来自Square。
1. 添加库依赖项
在 build.gradle 中,包括以下行:
compile 'com.squareup.okhttp:okhttp:x.x.x'
其中 x.x.x
是所需的库版本。
2. 设置客户端
例如,如果要将超时设置为 60 秒,请对版本 2 之前的改造和版本 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 new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
如果使用像我的方法类似的代码,则将方法返回类型更改为 Retrofit。providesRestAdapter
ps:如果你的minSdkVersion大于8,你可以使用:TimeUnit.MINUTES
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
有关单位的更多详细信息,请参阅时间单位。
这些答案对我来说已经过时了,所以这就是它是如何工作的。
添加OkHttp,在我的情况下,版本是:3.3.1
compile 'com.squareup.okhttp3:okhttp:3.3.1'
然后,在构建改造之前,请执行以下操作:
OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.build();
return new Retrofit.Builder()
.baseUrl(baseUrl)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();