#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()
.