我正在使用Retrofit2和OkhttpClient通过API调用与服务器进行交互
用户更改的基本Url取决于用户的设置。因此,我需要重新初始化Retrofit实例。但是,每当我重新初始化baseURL时,改造都会将请求计数增加1。如果我两次更改baseURL(API调用),则请求会两次发送到服务器
有没有办法避免这种情况
ServiceGenerator.java
public class ServiceGenerator {
private static HttpLoggingInterceptor logging =
new HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY);
private static OkHttpClient.Builder httpClient =
new OkHttpClient.Builder();
private static Retrofit.Builder builder;
private static Retrofit retrofit;
public static <S> S createService(
Class<S> serviceClass, Context context) {
PrefManager prefManager = new PrefManager(context);
if (prefManager.getUserRegion() != null) {
if (prefManager.getUserRegion().equals(UserRegion.SERVER1)) {
builder = new Retrofit.Builder()
.baseUrl(Constants.SERVER1)
.addConverterFactory(GsonConverterFactory.create());
} else {
builder = new Retrofit.Builder()
.baseUrl(Constants.SERVER2)
.addConverterFactory(GsonConverterFactory.create());
}
} else {
builder = new Retrofit.Builder()
.baseUrl(Constants.SERVER1)
.addConverterFactory(GsonConverterFactory.create());
}
if (BuildConfig.DEBUG) {
httpClient.addInterceptor(logging);
}
builder.client(httpClient.build());
retrofit = builder.build();
return retrofit.create(serviceClass);
}
}
活动/片段
初始化改造
private ApiClient = ServiceGenerator.createService(ApiClient.class, this);
用户旋转区域
if (regions.get(0).equalsIgnoreCase("Server1")) {
prefManager.setUserRegion(UserRegion.SERVER1);
} else {
prefManager.setUserRegion(UserRegion.SG);
}
使用新服务器重新初始化改造
private ApiClient = ServiceGenerator.createService(ApiClient.class, this);
现在,如果我执行任何Retrofit API调用,API请求将发送两次。