小编典典

如何在改造库中设置超时?

all

我在我的应用程序中使用Retrofit库,我想设置 60
秒的超时。Retrofit 有办法做到这一点吗?

我这样设置改造:

RestAdapter restAdapter = new RestAdapter.Builder()
    .setServer(BuildConfig.BASE_URL)
    .setConverter(new GsonConverter(gson))
    .build();

如何设置超时?


阅读 58

收藏
2022-07-04

共1个答案

小编典典

您可以在底层 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 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

2022-07-04