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