gpt4 book ai didi

android - 使用单例类改造动态基 url 更改

转载 作者:行者123 更新时间:2023-11-30 00:45:57 41 4
gpt4 key购买 nike

这是我的单例类。

public class GetRetrofit {


static volatile Retrofit retrofit = null;

public static Retrofit getInstance() {
if (retrofit == null) {
synchronized (GetRetrofit.class) {
if (retrofit == null) {
OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
builder.readTimeout(30, TimeUnit.SECONDS);
builder.connectTimeout(30, TimeUnit.SECONDS);

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(interceptor);

// builder.addInterceptor(new UnauthorisedInterceptor(context));
OkHttpClient client = builder.build();

retrofit =
new Retrofit.Builder().baseUrl("DYNAMIC_URL")
.client(client).addConverterFactory(GsonConverterFactory.create()).build();

//addConverterFactory(SimpleXmlConverterFactory.create())
}
}
}

return retrofit;

}
}

我想更改动态基 url。

例如:http://192.168.1.60:8888/property/Apiv1需要在运行时更改此 url http://192.168.1.50:8008/inventory/Apiv1 .

如何在运行时动态更改这两个 url。请帮助我。

最佳答案

以下代码将展示一种在运行时更改改造基本 url 的方法,但代价是稍微破坏单例模式。该模式仍然部分适用。我稍后会解释。

检查这个 GetRetrofit 的修改版本。

public class GetRetrofit {

static volatile Retrofit retrofit = null;
private static String baseUrlString = "http://192.168.1.60:8888/property/Apiv1";

public static void updateBaseUrl(String url){
baseUrlString = url;

retrofit = getRetrofitObj();
}

public static Retrofit getInstance() {
if (retrofit == null) {
synchronized (GetRetrofit.class ) {
if (retrofit == null) {
retrofit = getRetrofitObj();
}
}
}

return retrofit;
}

public static Retrofit getRetrofitObj() {
OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
builder.readTimeout(30, TimeUnit.SECONDS);
builder.connectTimeout(30, TimeUnit.SECONDS);

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(interceptor);

// builder.addInterceptor(new UnauthorisedInterceptor(context));
OkHttpClient client = builder.build();

retrofit = new Retrofit.Builder().baseUrl(baseUrlString)
.client(client).addConverterFactory(GsonConverterFactory.create()).build();
}
}

所以,GetRetrofit 有这个 baseUrlString 来初始化/保存我们的动态 url。如果您不需要更新默认的基本 url,那么您可以调用,

Retrofit retrofit = GetRetrofit.getInstance();

但是当我们需要将默认 url 更改为其他内容时(例如,http://192.168.1.50:8008/inventory/Apiv1),我们需要先更新我们的基本 url。

GetRetrofit.updateBaseUrl("http://192.168.1.50:8008/inventory/Apiv1");
Retrofit retrofit = GetRetrofit.getInstance(); // this provides new retrofit instance with given url

仅当您更新 url 时,才会基于此新 url 构建一个新的 retrofit 实例。只要您不需要更新基础 url,您只需调用即可获得单例改造实例,

Retrofit retrofit = GetRetrofit.getInstance();

所以在某种程度上它部分保留了单例模式的特点。

希望这对您有所帮助。

关于android - 使用单例类改造动态基 url 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41805341/

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