android - 刀柄 - 如何在初始化后更新值

android - hilt - How can I update values after initialization

在我的应用程序中,用户可以从任何片段登录,因此在登录后,如果我向服务器发送任何请求,新令牌不会发送。 例如,如果用户从片段 A 登录并发送请求,则用户的新令牌未随 headers 一起发送。 因为创建了 hilt viewModel 并且标记值 == null

如何刷新我之前注入的任何值?

@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)
}

}

我的视图模型

@HiltViewModel
class ProductsCategoryViewModel @Inject constructor(
private val service: CartService, private val mainRepository: MainRepository
) : BaseViewModel() {}

那么如何在创建注入值后更新令牌

您不能通过注入更新它。注入发生在实例化时,注入从不更新任何东西。您可以做的不是注入令牌,而是注入一个具有可为空 属性 token: Token? 的用户,客户端代码可以使用 getToken() 查询到 return 当前令牌,并且当用户登录时,您的登录系统可以使用当前令牌更新。在这种情况下,用户应该是通过注入作用域的单例,因此登录系统可以更新 class.

的唯一实例