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.
的唯一实例
在我的应用程序中,用户可以从任何片段登录,因此在登录后,如果我向服务器发送任何请求,新令牌不会发送。 例如,如果用户从片段 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.