![](/img/trans.png)
[英]OKHttp Authenticator not working with Retrofit suspend fun
[英]how to use Authenticator with suspend api function? Retrofit
我正在建立客戶:
OkHttpClient().newBuilder()
.authenticator(object : Authenticator {
override fun authenticate(route: Route?, response: Response): Request? {
val request = AppPreferences.refreshToken?.let {
api.refreshTokenC(it).execute()
}
...
})
為此,我使用通常的樂趣來返回調用:
@POST("Accounts/refresh")
fun refreshTokenC(@Query("refreshToken") refreshToken: String): Call<TokenResponse>
但是如何將它與暫停 function 一起使用?:
@POST("Accounts/refresh")
suspend fun refreshToken(@Query("refreshToken") refreshToken: String): Response<TokenResponse>
fun authenticate(route: Route?, response: Response)
不是掛起 function,我們不能從中調用掛起 function。
可以使用runBlocking
:
運行一個新的協程並中斷當前線程直到它完成。 此 function 不應在協程中使用。 它旨在將常規阻塞代碼連接到以掛起樣式編寫的庫,以用於主要功能和測試。
fun authenticate(route: Route?, response: Response)
在后台線程上被調用,我們可以安全地使用runBlocking
。val request = AppPreferences.refreshToken?.let { token ->
runBlocking { api.refreshToken(token) }
}
類似代碼: AuthInterceptor.kt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.