Android - hilt - Как изменить создание модификации после инициализации?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android - hilt - Как изменить создание модификации после инициализации?

Сообщение Anonymous »

Код: Выделить всё

@Module
@InstallIn(SingletonComponent::class)
object AppModule {

/*
@Singleton
TR -> Tüm uygulamada oluşturulan tek örnek kullanılacak bir daha instance oluşturmayacak ---silinebilir
EN -> The only instance created in the entire application will be used and will not create another instance ---can be deleted
*/

private var retrofitInstance: Retrofit? = null

private fun createRetrofitInstance(): Retrofit{
val okHttpClient = OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
.apply {
if (**Utils.isDeveloper**) { // Chuck On/Off Preference
addInterceptor(ChuckInterceptor(Utils.context))
}
}
.build()

return Retrofit.Builder()
.baseUrl(WebServiceUtils.generateBaseUrl())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
}`

fun updateRetrofitInstance() {
retrofitInstance = createRetrofitInstance()
}

@Provides
fun provideRetrofitInstance(): Retrofit {
if (retrofitInstance == null) {
retrofitInstance = createRetrofitInstance()
}
return retrofitInstance!!
}

@Provides
fun provideTransactionService(retrofit: Retrofit): TransferRestInterface{
return retrofit.create(TransferRestInterface::class.java)
}
}
Как я могу гарантировать использование актуального объекта Retrofit?

Код: Выделить всё

apply {
if (Utils.isDeveloper) { // Chuck On/Off Preference
addInterceptor(ChuckInterceptor(Utils.context))
}
}
В этой части я получаю значение isDeveloper с помощью SharedPreferences. При запуске приложения Retrofit создается напрямую и получает значение isDeveloper. Позже, хотя объект Retrofit обновляется при изменении значения isDeveloper на экране настроек, программа все равно использует предыдущий.
Причина этого заключается в том, что при первом открытии программы следующая часть работает:

Код: Выделить всё

@Provides
fun provideTransactionService(retrofit: Retrofit): TransferRestInterface{
return retrofit.create(TransferRestInterface::class.java)
}
После этого, даже если Retrofit будет обновлен, эта часть больше не будет работать.

Подробнее здесь: https://stackoverflow.com/questions/783 ... ialization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»