Синхронный вызов 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
Неразрешенная ссылка Поведение прокрутки списка вложенных списков в Android Выполнение не выполнено для задачи ': app: compileDebugKotlin'. > Внутренняя ошибка компилятора. Подробнее см. Журнал Перекрестные ссылки в параметрах типа Почему интеллектуальное сканирование сбрасывается для значения NULL после установки значения и проверки, является ли оно нулевым? Обработчик комментариев Kotlin: он не может заставить его работать Автоматический приращение документа Firestore из спискаView Позиция метки `@` в Котлине, обозначая приемник с `this` Нулевые проверки не вставляются для типа reified, если параметр не является нулевым Использование карты RXJava в Котлине? Как нарисовать Int в Char в Котлине Возвращение котлинских кодов Java в Android Studio Canary 5 Как сделать аргумент по умолчанию? Функция расширения в перечислителе, `values ​​()` недоступна? Проблема генерических свойств Котлина