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

  • Retrofit2 + SimpleXML en Kotlin: MethodException: la anotación debe marcar un set o método get
  • Android Retrofit Get Query codificado
  • Definir el tipo de retorno de modificación utilizando la interfaz en lugar de la class
  • ¿Cómo correctamente serializar tal JSON por medio de GSON Android?
  • Retrofit API call: ¿Cómo asegurarse de que el valor no sea nulo después de realizar una llamada de API?
  • Adaptar el cuerpo de la respuesta 2 a la class personalizada
  • Problemas para get API de Meetup Token de acceso con modificación - Android
  • Adaptador personalizado de Moshi con RxAndroid & Retrofit & Kotlin
  • Android Kotlin Dagger2 proporciona gson: el parámetro especificado como no nulo es nulo
  • Obteniendo respuesta HTML / JSON original por error con Retrofit 2 y Kotlin
  • ¿Cómo crear una llamada asincrónica utilizando modificaciones y observaciones en Kotlin?