Android 2 Retrofit llamada sincrónica

Necesito la llamada sincrónica para actualizar el token de authentication, pero obtuve ' 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 } 

¿Cómo debo hacer para evitar la "exception 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 ... 

la mejor forma de implementar refreshToken con Retrofit es usar Authenticator.

 class TokenAuthenticator : Authenticator { override fun authenticate(route: Route?, response: Response?): Request { //call your Refresh Token here } } 

finalmente configure TokenAuthenticator para su OkHttpClient

 val httpClient : OkHttpClient.Builder = OkHttpClient.Builder() httpClient.authenticator (TokenAuthenticator()) 

si insistes en usar tu path, debes llamar a la actualización api en otro hilo

  • ¿Cómo usar Kotlin enum con Retrofit?
  • HttpLoggingInterceptor no inicia session con la actualización 2
  • Cómo volver a intentar el retroceso exponencial en corotines de kotlin
  • Readaptación con kotlin, incapaz de crear @Body
  • Retrofit2 return null Unidad en kotlin para 204 Sin respuesta de contenido
  • Dagger2 no puede acceder a las anulaciones. javax.annotation.Nullable not found
  • RxJava2 + Retrofit pantalla negra en request de datos
  • Android Retrofit Get Query codificado
  • Retrofit2 y kotlin
  • Adaptador personalizado de Moshi con RxAndroid & Retrofit & Kotlin
  • Retrofit - pasa dos parameters