你可以通过创建Retrofit对象工厂方法的重载方法来实现。它可能看起来像这样。
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配置的不同方法,而不是创建重载方法。希望这个解决方案能够解决您的问题。