Okhttp SocketTimeoutException в приложении Launcher - PullRequest
0 голосов
/ 04 марта 2020

У меня есть приложение, которое является пусковой установкой по умолчанию из Android.

Когда я перезагружаю телефон, приложение запускается, затем пытается выполнить http-вызов и получает это исключение:

HTTP FAILED: java.net.SocketTimeoutException: failed to connect to XXXX (port 80) from localAddress.getAddress() (port 42208) after 30000ms

Если я выйду из приложения и вернусь к нему, http-вызовы начнут работать.

Это моя настройка клиента:

val client = OkHttpClient.Builder()
            client.connectTimeout(30, TimeUnit.SECONDS)
            client.readTimeout(30, TimeUnit.SECONDS)
            client.writeTimeout(30, TimeUnit.SECONDS )
            client.retryOnConnectionFailure(true)
            client.connectionPool(ConnectionPool(0, 5, TimeUnit.MINUTES))
            client.protocols(listOf(Protocol.HTTP_1_1))

val retrofit = Retrofit.Builder()
                    .client(client.build())
                    .addCallAdapterFactory(
                            RxJava2CallAdapterFactory.create())
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addConverterFactory(
                            GsonConverterFactory.create())
                    .baseUrl(base_url)
                    .build()

Устройство: Xiaomi Redmi 8a

ОС: MIUI 10.3.3.0 Android 9

Модификация: 2.7.2

OKHttp: 4.4.0

1 Ответ

0 голосов
/ 04 марта 2020

Я столкнулся с подобной проблемой. Не уверен, что это ваш ответ, но я надеюсь, что это решит вашу проблему.

Если я ошибаюсь, вы пытаетесь получить данные, используя RxJava2. Согласно этому документу - документация по обработке ошибок . Документация говорит, что бросаемые ошибки не обрабатываются после наблюдаемого disposed / terminated

Это означает, что когда ваш Single / Observable называется onComplete(), иногда он несет ошибку и выбрасывает UndeliverableException, SocketTimeoutException или другие Exception с. Мы столкнулись с SocketTimeoutException в Firebase Crashlytics.

Мы обработали, просто добавьте эту строку в наш AppApplication класс [onCreate()] -

RxJavaPlugins.setErrorHandler { error: Throwable ->
        Timber.e(error) // you can do some task with the Throwable here if you need
    }

Надеюсь, это поможет ... :)

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