Android 启动器应用程序上的Okhttp SocketTimeoutException

Android 启动器应用程序上的Okhttp SocketTimeoutException,android,retrofit,retrofit2,okhttp,android-launcher,Android,Retrofit,Retrofit2,Okhttp,Android Launcher,我有一个应用程序是Android的默认启动器 当我重新启动手机时,应用程序会运行,然后尝试进行http呼叫,并出现以下异常: HTTP FAILED: java.net.SocketTimeoutException: failed to connect to XXXX (port 80) from localAddress.getAddress() (port 42208) after 30000ms 如果我离开应用程序并返回到它,http调用就会开始工作 这是我的客户端设置: val cli

我有一个应用程序是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()
设备:小米红米8a

操作系统:MIUI10.3.3.0安卓9

改装:2.7.2


OKHttp:4.4.0

我也遇到过类似的问题。我不确定这是你的答案,但我希望,它会解决你的问题

如果我错了,您正在尝试使用RxJava2获取数据。根据这份文件-。文档告诉我们,可丢弃的错误在可观察到的被处置/终止后不会处理

这意味着当您的Single/Observable调用onComplete时,有时它会携带错误并抛出UndeliverableException、SocketTimeoutException或其他异常。在Firebase Crashlytics中我们经常遇到SocketTimeoutException

我们已经在AppApplication类[onCreate]中添加了这一行-


我希望,这将有助于……:

对不起,朋友,我已经试过你的建议了,还是不走运,谢谢你尝试。听到这个消息我很难过。你能看看这个吗?我在okhttp问题中找到了它——我也去过那里。我试图在没有改造的情况下用OkHttp打电话,但仍然面临这个问题。你的URL是本地主机吗?我认为,你给定的URL是个问题。你能查其他网址吗?在Android 8中,默认情况下不允许明文HTTP通信。您必须在AndroidManifest中添加android:usesCleartextTraffic=true。详细信息:它不是本地主机。问题是,当重新打开应用程序时,一切正常
RxJavaPlugins.setErrorHandler { error: Throwable ->
        Timber.e(error) // you can do some task with the Throwable here if you need
    }