gpt4 book ai didi

android - 改造 2 : How to set individual timeouts on specific requests?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:10 26 4
gpt4 key购买 nike

我通过以下方式在我的 Retrofit 适配器中设置了全局超时

OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(20, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(20, TimeUnit.SECONDS);

retrofit = new Retrofit.Builder()
.client(okHttpClient)
.build();

太棒了!但我想为某些请求设置一个特定的超时例如

public interface MyAPI {

@GET()
Call<Void> notImportant (@Url String url);

@GET
Call<Void> veryImportant(@Url String url);

所以 veryImportant 调用我想要 35 秒的超时,但 notImportant 默认值

这可能吗?

我的研究进展顺利。

不过我遇到了这个,但不确定它是否适用于 Retrofit

https://github.com/square/okhttp/wiki/Recipes#per-call-configuration

感谢阅读。请帮忙。

最佳答案

您可以通过创建改造对象工厂方法的重载方法来做到这一点。它可能看起来像这样。

public class RestClient {

public static final int DEFAULT_TIMEOUT = 20;

public static <S> S createService(Class<S> serviceClass) {
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
OkHttpClient client = httpClient.build();
okHttpClient.setReadTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);

Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
.client(client)
.build();
return retrofit.create(serviceClass);
}

public static <S> S createService(Class<S> serviceClass, int timeout) {
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
OkHttpClient client = httpClient.build();
okHttpClient.setReadTimeout(timeout, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(timeout, TimeUnit.SECONDS);

Retrofit retrofit = new Retrofit.Builder().baseUrl(APIConfig.BASE_URL)
.client(client)
.build();
return retrofit.create(serviceClass);
}


}

如果你想用默认超时调用api,你可以像这样调用它。

MyAPI api = RestClient.createService(MyAPI.class);
api.notImportant();

如果你想通过身份验证调用 api,请使用第二个:

int timeout = 35;
MyAPI api2 = RestClient.createService(MYAPI.class, timeout);
api2.veryImportant();

另一种解决方案是使用不同的 OkHttpClient 配置创建不同的方法,而不是创建重载方法。希望此解决方案能解决您的问题。

关于android - 改造 2 : How to set individual timeouts on specific requests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35378787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com