OkHttp Сброс соединения, если соединение включено - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть вариант использования, который я использую мобильный интернет (через оператора), но я превышаю мой лимит данных.В этом случае мой телефон видит соединение как доступное, но я не могу открыть какую-либо веб-страницу.

Так что в этом случае я получаю SocketException (сброс соединения) при попытке сделать вызов с retrofit2 и Okhttp.

В моем коде приложение вылетает в строке "return":

.addInterceptor(Interceptor {
            val newRequest = it.request().newBuilder()
                .header("Accept", "application/json")
                .header("Content-Type", "application/json")
                .header("Authorization", "${App.sessionManager.tokenType} ${App.sessionManager.accessToken}")
                .build()
            return@Interceptor it.proceed(newRequest)
        })

Может кто-нибудь подсказать, как предотвратить сбой приложения?Заранее спасибо.

1 Ответ

0 голосов
/ 19 декабря 2018

Проблема в том, что Kotlin не заставляет вас catch проверять исключение - как SocketException - и так как никто не ловит его, система завершает работу вашего приложения.В Java вы будете вынуждены его поймать.

Нет способа предотвратить выбрасывание исключения - это просто означает, что произошло что-то непредвиденное - и было бы неправильно не бросать его, поэтому вы должны простоcatch это в какой-то момент в вашем коде.Где вы должны поймать это?Нет абсолютно правильного ответа на этот вопрос, но вы должны поймать его, как только вы сможете сделать что-то полезное с ним, например, записать и перебросить его или обработать, чтобы продолжить выполнение потока приложения (например, отображать какую-то ошибку впользователь и позволяет им повторить эту операцию).

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