【问题标题】:How to change base URL using retrofit2 and koin 2.0如何使用 retrofit2 和 koin 2.0 更改基本 URL
【发布时间】:2020-02-06 14:50:30
【问题描述】:

我有一个返回服务器列表的查询,用户可以选择他需要的服务器。

谷歌搜索没有帮助,几乎没有结果。

告诉我如何使用 Koin 和 Retrofit 实时实现基本的 URL 欺骗?

我的模块:

fun createMainModule(context: Context) = module {

    single(named(APP_CONTEXT)) { context }

    single(named(RESOURCES)) { context.resources }

    single(named(REPOSITORY)) {
        Repository(get(named(RETROFIT)))
    }
}

fun createNetworkModule(baseUrl: String) = module(override = true) {

    single(named(TOKEN_INTERCEPTOR)) { createTokenInterceptor(get(named(DATA_PROVIDER))) }

    single(named(OK_HTTP)) { createOkHttpClient(get(named(TOKEN_INTERCEPTOR))) }

    single(named(GSON)) { createGson() }

    single(named(RETROFIT)) {
        createRetrofit(
            get(named(RESOURCES)),
            get(named(LOG_OUT_SUBJECT)),
            get(named(GSON)),
            baseUrl,
            get(named(OK_HTTP))
        )
}

【问题讨论】:

标签: java android kotlin retrofit koin


【解决方案1】:

我通过评论@sonnet 解决了我的问题 这段代码:

class ChangeableBaseUrlInterceptor : Interceptor {
    @Volatile
    private var host: HttpUrl? = null

    fun setHost(host: String) {
        this.host = host.toHttpUrlOrNull()
    }

    fun clear() {
        host = null
    }

    @Throws(IOException::class)
    override fun intercept(chain: Interceptor.Chain): okhttp3.Response {
        var request = chain.request()
        host?.let {
            val newUrl = request.url.newBuilder()
                .scheme(it.scheme)
                .host(it.toUrl().toURI().host)
                .port(it.port)
                .build()
            request = request.newBuilder().url(newUrl).build()
        }
        return chain.proceed(request)
    }
}

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2021-12-02
    • 2018-09-03
    • 2015-12-07
    • 2016-05-20
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多