Android – hilt – ¿Cómo puedo actualizar valores después de la inicialización?
En mi aplicación, el usuario puede iniciar sesión desde cualquier fragmento, por lo que después del inicio de sesión, si envío alguna solicitud al servidor, el nuevo token no se envía. Por ejemplo, si el usuario inicia sesión desde el fragmento A y envía una solicitud, el nuevo token del usuario no se envía con los encabezados. Esto se debe a que se ha creado el ViewModel de Hilt y la token tiene un valor nulo.
¿Cómo puedo actualizar cualquier valor que inyecté anteriormente?
@Module
@InstallIn(ActivityRetainedComponent::class)
object NetworkModule {
@Provides
fun provideMainRepository(): MainRepository {
return MainRepository()
}
@Provides
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BuildConfig.BASE_URL)
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.addConverterFactory(GsonConverterFactory.create(GsonBuilder().setLenient().create()))
.build()
}
@Provides
fun provideOkHttpClient(token:String): OkHttpClient {
val okHttpClient = OkHttpClient.Builder()
okHttpClient.addInterceptor(HttpRequestInterceptor(token))
return okHttpClient.build()
}
@Provides
fun provideToken(@ApplicationContext context: Context): String {
return context.getToken()
}
@Provides
fun provideDataService(retrofit: Retrofit): DataService {
return retrofit.create(DataService::class.java)
}
}
Mi ViewModel
@HiltViewModel
class ProductsCategoryViewModel @Inject constructor(
private val service: CartService, private val mainRepository: MainRepository
) : BaseViewModel() {}
Entonces, ¿cómo puedo actualizar el token después de que se hayan creado los valores inyectados?
davy.ai
Una opción es utilizar un objeto LiveData para el valor del token en su ViewModel y observarlo en sus fragmentos. Cada vez que se actualice el valor del token, puede llamar a un método en su ViewModel para actualizar el OkHttpClient con el nuevo valor del token.
Aquí hay un ejemplo de implementación:
¡Espero que esto ayude! Háganos saber si tiene alguna pregunta.