Android Retrofit 2同步通话
我需要同步调用刷新身份验证令牌,但我得到了“ NetworkOnMainThreadException ”。
@Synchronized fun refreshToken(): String? { val refreshToken = AuthService.getRefreshToken(context) var id_token: String? = null val call = apiService.refreshToken("refresh_token", refreshToken) val response = call.execute() id_token = response.body() if (id_token != null) { AuthService.saveTokens(context, id_token) } }) return id_token }
我应该如何避免“NetworkOnMainThreadException”?
D/OkHttp: --> POST https://localhost/api/auth/refresh http/1.1 (372-byte body) D/OkHttp: <-- HTTP FAILED: android.os.NetworkOnMainThreadException D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.test, PID: 1537 android.os.NetworkOnMainThreadException ...
用Retrofit实现refreshToken的最好方法是使用Authenticator。
class TokenAuthenticator : Authenticator { override fun authenticate(route: Route?, response: Response?): Request { //call your Refresh Token here } }
最后把TokenAuthenticator设置成你的OkHttpClient
val httpClient : OkHttpClient.Builder = OkHttpClient.Builder() httpClient.authenticator (TokenAuthenticator())
如果你坚持使用你的方式,你应该在另一个线程中调用翻新API