Синхронный вызов Android Retrofit 2

Мне нужен синхронный вызов, чтобы обновить токен Auth, но я получил « 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 ... 

лучший способ реализовать refreshToken с помощью Retrofit – использовать 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()) 

если вы настаиваете на том, чтобы использовать свой путь, вы должны позвонить retrofit api в другой поток

Intereting Posts
Как разбирать xml в кодировке Android App? Автофокус не работает в Samsung S8 Почему интеллектуальное сканирование сбрасывается для значения NULL после установки значения и проверки, является ли оно нулевым? Что такое интеграция интеграции с переходом на глиссирование? Как я могу повторно использовать / составлять часть запроса JOOQ в методе репозитория? Тип союза между Any? и блок Kotlin – Как решить между «lateinit» и «nullable variable»? Использование с автоклином в Котлине Должен ли я использовать демо-код ARCore или написать его самостоятельно? Котлин: функция делегирования Как я могу приостановить событие, проходящее через наблюдаемое? Установите маркер времени выполнения для любого вида с помощью Kotlin Kotlin автоматически завершает переопределения в Android Studio пустой конструктор классов данных для Firebase @DataJpaTest и метод @Async CRUDRepository не работают вместе