Android 改装拦截器无法链接更新的 Prefs 值
Android retrofit interceptor cannot chain updated Prefs value
这是我的拦截器,为所有传出请求链接。在“/login”请求之后,令牌被更新。我正在使用 easyprefs 访问 sharedpreference。但是下一个请求,更新的 AUTH_TOKEN 值没有链接。有人建议解决方法。
class AuthInterceptor : Interceptor {
val token = Prefs.getString("AUTH_TOKEN", "")
val authToken = "Bearer $token"
override fun intercept(chain: Interceptor.Chain): Response {
val newRequest = chain.request().newBuilder()
.addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
.addHeader("Authorization", authToken)
.build()
return chain.proceed(newRequest)
}
}
您可能使用了一个 Singleton
实例,这就是实例变量将被初始化一次的原因。使用此结构,您应该在 #intercept()
内获得偏好值,以便每次都能获得更新的值。
class AuthInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val token = Prefs.getString("AUTH_TOKEN", "")
val authToken = "Bearer $token"
val newRequest = chain.request().newBuilder()
.addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
.addHeader("Authorization", authToken)
.build()
return chain.proceed(newRequest)
}
}
您需要在保存后读取授权令牌,而不是在实例化拦截器时读取:
class AuthInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val token = Prefs.getString("AUTH_TOKEN", "")
val authToken = "Bearer $token"
val newRequest = chain.request().newBuilder()
.addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
.apply {
if (!token.isNullOrEmpty()) {
addHeader("Authorization", authToken)
}
.build()
return chain.proceed(newRequest)
}
}
这是我的拦截器,为所有传出请求链接。在“/login”请求之后,令牌被更新。我正在使用 easyprefs 访问 sharedpreference。但是下一个请求,更新的 AUTH_TOKEN 值没有链接。有人建议解决方法。
class AuthInterceptor : Interceptor {
val token = Prefs.getString("AUTH_TOKEN", "")
val authToken = "Bearer $token"
override fun intercept(chain: Interceptor.Chain): Response {
val newRequest = chain.request().newBuilder()
.addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
.addHeader("Authorization", authToken)
.build()
return chain.proceed(newRequest)
}
}
您可能使用了一个 Singleton
实例,这就是实例变量将被初始化一次的原因。使用此结构,您应该在 #intercept()
内获得偏好值,以便每次都能获得更新的值。
class AuthInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val token = Prefs.getString("AUTH_TOKEN", "")
val authToken = "Bearer $token"
val newRequest = chain.request().newBuilder()
.addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
.addHeader("Authorization", authToken)
.build()
return chain.proceed(newRequest)
}
}
您需要在保存后读取授权令牌,而不是在实例化拦截器时读取:
class AuthInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val token = Prefs.getString("AUTH_TOKEN", "")
val authToken = "Bearer $token"
val newRequest = chain.request().newBuilder()
.addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
.apply {
if (!token.isNullOrEmpty()) {
addHeader("Authorization", authToken)
}
.build()
return chain.proceed(newRequest)
}
}