Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Reformation2和Koin2.0更改基本URL_Java_Android_Kotlin_Retrofit_Koin - Fatal编程技术网

Java 如何使用Reformation2和Koin2.0更改基本URL

Java 如何使用Reformation2和Koin2.0更改基本URL,java,android,kotlin,retrofit,koin,Java,Android,Kotlin,Retrofit,Koin,我有一个返回服务器列表的查询,用户可以选择他需要的服务器 谷歌搜索没有帮助,几乎没有结果 告诉我如何使用Koin和改进实时实现基本URL欺骗 我的模块: fun createMainModule(context: Context) = module { single(named(APP_CONTEXT)) { context } single(named(RESOURCES)) { context.resources } single(named(REPOSITOR

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

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

告诉我如何使用Koin和改进实时实现基本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))
        )
}

我用comment@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)
    }
}

我用comment@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)
    }
}

最好的做法是编写一个okhttp拦截器,并为每个请求更新base_url。这就是我所做的,也可能是调查这件事的复制品:匕首2它不是Koin@sonnet嗯,一个好的选择最好的办法是编写一个okhttp拦截器,并为每个请求更新基本url。这就是我所做的,也可能是调查这件事的复制品:匕首2它不是Koin@sonnet嗯,一个不错的选择