Модернизация с помощью динамического URL

#android #kotlin #retrofit

#Android #котлин #модернизация

Вопрос:

в моем приложении я использую обновление 2.9.0, моя проблема в том, что пользователь может полностью изменить URL-адрес из меню приложения, в этом случае он не работает, когда я изменил URL-адрес, только если я перезапущу приложение.

это мой пример Модернизации :

 object ApiService {

var token: String = ""

@JvmName("setToken1")
fun setToken(tk: String) {
    token = tk
}

private val globalInterceptor = GlobalErrorInterceptor()
private val loginInterceptor = LoginErrorInterceptor()

private val okHttpClient =
    OkHttpClient.Builder().addInterceptor(globalInterceptor).build()

private val okHttpClientLogin =
    OkHttpClient.Builder().addInterceptor(loginInterceptor).build()

var gson = GsonBuilder()
    .setLenient()
    .create()

 /**This instance for the  others requests */
private val retrofit by lazy {
    Retrofit.Builder()
        .baseUrl(LOGIN_URL)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .client(okHttpClient)
        .build()

}

val API: WebServicesApi by lazy {
    retrofit.create(WebServicesApi::class.java)

}

/**This instance for the login to get the Token */
private val retrofitLogin by lazy {
    Retrofit.Builder()
        .baseUrl(LOGIN_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .client(okHttpClientLogin)
        .build()

}

val APILogin: WebServicesApi by lazy {

    retrofitLogin.create(WebServicesApi::class.java)

}


}
 

Ответ №1:

Вы можете динамически изменять URL-адрес модернизации, делая что-то вроде этого. Сначала измените retrofit с val на var .

 private fun changeBaseUrl(url: String) {
    // change the base url only if new url is different than old url
    if (retrofit.baseUrl().toString() != url) {
        retrofit = retrofit.newBuilder().baseUrl(url).build()
    }
}
 

Пожалуйста, обратите внимание, что вам, возможно, придется изменить этот метод и вызвать его в соответствии с вашим потоком. Главное, на что следует обратить внимание, это использование .newBuilder().baseUrl(url).build() .