Как бороться с исключением с ошибкой отложенного ожидания в Retrofit - PullRequest
0 голосов
/ 14 мая 2019

Наше приложение имеет много сетевых запросов, и мы используем сопрограммы с Retrofit следующим образом:

suspend fun fetchAccountInfo() {
    val api = retrofit.create(MainActivityApi::class.java)
    val versionResponse = api.getVersionAsync().await()
    ...
}

Проблема в том, что когда устройство не подключено к интернету, Retrofit выдаст исключение, и приложение вылетит. Я нашел эту ссылку , в которой написано, поместите await () в попытку / уловку так:

suspend fun fetchAccountInfo() {
    val api = retrofit.create(MainActivityApi::class.java)
    try {
        val versionResponse = api.getVersionAsync().await()
    } catch(e: Exception) {
      //
    }
    ...
}

Но у нашего приложения много сетевых запросов, и это решение нам не подходит. Как я могу предотвратить падение приложения, не помещая все вызовы await () в try / catch?

1 Ответ

0 голосов
/ 14 мая 2019

Несмотря на то, что обертывание является предпочтительным методом, я считаю, что есть другой способ (я бы не использовал его лично, но может подойти вам)

Вы можете создать перехватчик OkHttp, который будет выполнять перехват запросов для каждого запроса и который будет возвращать ответ, созданный статическим Response.error (someParams) ретрофита.

Вы могли бы обратиться к https://github.com/gildor/kotlin-coroutines-retrofit/issues/34 для конструкции, вам в основном нужно было бы только изменить блок catch {}.

Надеюсь, это поможет, GL!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...