【发布时间】:2019-10-12 20:37:23
【问题描述】:
在 Android 应用中使用 Retrofit 进行网络调用和 Koin 进行依赖注入,如何支持动态 url 更改?
(在使用应用程序时,用户可以切换到另一个服务器)
编辑:网络模块声明如下:
fun networkModule(baseUrl: String) = module {
single<Api> {
Retrofit.Builder()
.baseUrl(baseUrl)
.client(OkHttpClient.Builder().readTimeout(30, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build())
.build().create(Api::class.java)
}
我在应用程序类 onCreate 中启动 Koin,如下所示:
startKoin {
if (BuildConfig.DEBUG) AndroidLogger() else EmptyLogger()
androidContext(this@App)
modules(listOf(networkModule(TEST_API_BASE_URL), storageModule, integrationsModule, appModule))
}
【问题讨论】:
-
如果没有 minimal reproducible example 显示您的 Koin 设置以及您在哪里插入 Retrofit,任何人都很难帮助您。您需要为新的基本 URL 创建一个新的
Retrofit实例。如何将Retrofit实例添加到需要它的代码中取决于需要它的内容以及这些东西本身是如何创建的。您可以使用a scope 通过在 URL 更改时关闭范围来强制创建新的Retrofit实例。 -
你说得对...我已经包含了代码的相关部分..
-
您可以使用 Url 注释 public interface APIService { @GET Call
getUsers(@Url String url); }
标签: android dependency-injection retrofit koin