改装动态基本网址

时间:2018-09-06 03:07:41

标签: java android oop retrofit

我正在使用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请求将发送两次。

0 个答案:

没有答案