【发布时间】:2016-12-12 20:10:22
【问题描述】:
我有一个场景,我必须使用相同的基本 URL 调用 API,例如www.myAPI.com 但使用不同的baseUrl。
我有一个 Retrofit 2 实例,它是通过 Builder 构建的:
return new Retrofit.Builder()
.baseUrl(FlavourConstants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build();
FlavourConstants.BASE_URL 看起来像这样:
public static final String BASE_URL = "http://myApi.development:5000/api/v1/";
对于某些WebRequests,我必须调用相同的API,但对于其他人,我必须从完全不同的BaseUrl 调用它。如何在运行时更改 Retrofit 实例以指向不同的 URL?
Retrofit 实例没有.setBaseUrl 或setter 或任何类似的东西,因为它是通过Builder 构建的。
有什么想法吗?
【问题讨论】:
-
正如您已经提到的,
Retrofit实例是不可变的(这是 Builders 的用途)。因此,您需要为要设置的其他 URL 创建另一个实例。 -
stackoverflow.com/a/63076030/7511020 如果您没有使用 dagger2,那么只需查看 step1 并将您的拦截器添加到 HttpClient Builder 对象中