gpt4 book ai didi

android - 我如何在 okhttp Interceptor 中使用 jectpack 数据存储?它需要一个上下文对象

转载 作者:行者123 更新时间:2023-12-04 23:42:32 25 4
gpt4 key购买 nike

我想在 Interceptor 中添加一个 token 来请求 header 。但现在我不知道我该怎么办。
这是我的数据存储


val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")

class SettingsManager(context: Context) {
private val dataStore = context.dataStore

val getToken = dataStore.data
.catch {
if (it is IOException) {
it.printStackTrace()
emit(emptyPreferences())
} else {
throw it
}
}.map { preference ->
preference[token] ?: ""
}

suspend fun setToken(tokenStr: String) {
dataStore.edit { preferences ->
preferences[token] = tokenStr
}
}

companion object {
val token = stringPreferencesKey("token")
}
}
我无法在 Interceptor 中获取上下文对象。
所以我尝试使用刀柄来修复它
class RequestInterceptor(private val settingsManager: SettingsManager) : Interceptor {

override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
runBlocking {
val first = settingsManager.getToken.first()
LogUtil.i("token " + first)
request.newBuilder().addHeader("token", first).build();
}
return chain.proceed(request)
}
}
我不知道下一步 @AndroidEntryPoint不能在拦截器类上使用。
请各位大侠给我一些解决办法

最佳答案

如果您只需添加 @Inject constructor,您应该能够在 Hilt 中看到它。到您的 RequestInterceptor。
例如。class RequestInterceptor @Inject constructor(private val settingsManager: SettingsManager) : Interceptor {...而且我不确定您是否可以像那样执行 SettingsManager,但您可以尝试 class SettingsManager @Inject constructor(@ApplicationContext context: Context) {

关于android - 我如何在 okhttp Interceptor 中使用 jectpack 数据存储?它需要一个上下文对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67579962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com