Nur*_*lov 6 android okhttp retrofit2 kotlin-coroutines
我正在构建客户端:
OkHttpClient().newBuilder()
.authenticator(object : Authenticator {
override fun authenticate(route: Route?, response: Response): Request? {
val request = AppPreferences.refreshToken?.let {
api.refreshTokenC(it).execute()
}
...
})
Run Code Online (Sandbox Code Playgroud)
为此,我使用通常的 fun 来返回 Call :
@POST("Accounts/refresh")
fun refreshTokenC(@Query("refreshToken") refreshToken: String): Call<TokenResponse>
Run Code Online (Sandbox Code Playgroud)
但是如何将它与挂起功能一起使用呢?:
@POST("Accounts/refresh")
suspend fun refreshToken(@Query("refreshToken") refreshToken: String): Response<TokenResponse>
Run Code Online (Sandbox Code Playgroud)
fun authenticate(route: Route?, response: Response)不是挂起函数,我们不能从中调用挂起函数。
可以使用runBlocking:
运行一个新的协程并中断地阻塞当前线程,直到其完成。不应在协程中使用此函数。它旨在将常规阻塞代码桥接到以挂起风格编写的库,以在主函数和测试中使用。
fun authenticate(route: Route?, response: Response)在后台线程上被调用,我们可以runBlocking安全地使用。val request = AppPreferences.refreshToken?.let { token ->
runBlocking { api.refreshToken(token) }
}
Run Code Online (Sandbox Code Playgroud)
类似代码:AuthInterceptor.kt
| 归档时间: |
|
| 查看次数: |
2333 次 |
| 最近记录: |