【问题标题】:Call a DataStore inside an interceptor在拦截器中调用 DataStore
【发布时间】:2021-09-23 03:45:25
【问题描述】:

我正在尝试使用拦截器内的流从数据存储中调用方法,但它不起作用。

正确的做法是什么?

在这里我定义了我的拦截器

class AuthorizationInterceptor @Inject constructor(
    @ApplicationContext private val appContext: Context,
) : HttpInterceptor {

    private val authPreferences = AuthPreferences(appContext)

    override suspend fun intercept(
        request: HttpRequest,
        chain: HttpInterceptorChain
    ): HttpResponse {
        // here I try to get the token
        var tokenString = "";
        authPreferences.getAccessToken.collect { token ->
            tokenString = token
        }
        return chain.proceed(request.withHeader("Authorization", "Bearer $tokenString"))

        //return chain.proceed(request.withHeader("Authorization", "Bearer 1111"))
    }

}

我在这里定义我的商店

private val Context.dataStore: DataStore<Preferences> by preferencesDataStore("auth_pref");

class AuthPreferences(private val context: Context) {

    companion object {
        val AUTH_ACCESS_TOKEN = stringPreferencesKey(name = "auth_access_token")
        val AUTH_REFRESH_TOKEN = stringPreferencesKey(name = "auth_refresh_token")
    }

    suspend fun saveAccessToken(token: String) {
        context.dataStore.edit { preferences ->
            preferences[AUTH_ACCESS_TOKEN] = token
        }
    }

    val getAccessToken: Flow<String> = context.dataStore.data
        .map { preferences ->
            preferences[AUTH_ACCESS_TOKEN] ?: ""
        }

    suspend fun saveRefreshToken(token: String) {
        context.dataStore.edit { preferences ->
            preferences[AUTH_REFRESH_TOKEN] = token
        }
    }

    val getRefreshToken: Flow<String> = context.dataStore.data
        .map { preferences ->
            preferences[AUTH_REFRESH_TOKEN] ?: ""
        }
}

我认为我的问题在于流程

【问题讨论】:

  • 这与jetpack compose无关。使用 runBlocking,然后在流上首先调用。

标签: android kotlin android-jetpack-compose android-jetpack


【解决方案1】:

你可以使用它
val getRefreshToken =runBlocking { session.getRefreshToken() }

然后你就可以使用它了。

【讨论】:

    猜你喜欢
    • 2012-08-18
    • 2015-04-16
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多