- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:一旦返回 UnknownHostException,用户将继续收到相同的错误,除非重新安装应用程序或重新启动设备。
在操作系统为 Android 11 的用户中,只有少数用户遇到了问题。
最大的问题是,当发生错误时,每次请求都连续返回相同的错误。
据用户称,重新安装应用程序或重新启动设备将再次起作用。
似乎 99% 是三星设备的用户。有时也有 Google Pixel 手机。
Http 和 Https 都给出相同的错误。
Wifi、5G 和 LTE 都给出相同的错误。
请求方法使用的是 POST,我不知道它是否也发生在 GET 上,我不使用 GET。
此外,线程是背景或前景,或两者兼而有之。
在这我的代码
Gradle :
android {
minSdkVersion 21
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
/* RETROFIT */
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
/* OKHTTP */
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
implementation 'com.squareup.okhttp3:okhttp-urlconnection:4.9.0'
/* RXJAVA RXANDROID */
implementation 'io.reactivex.rxjava3:rxjava:3.0.11'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
}
创建请求:
interface ApiService {
@POST("get-data")
fun getData(@Body parameter : CustomParameter): Single<Response<CustomObject>>
companion object {
private val rxJava3CallAdapterFactory: RxJava3CallAdapterFactory
get() = RxJava3CallAdapterFactory.createWithScheduler(Schedulers.io())
private fun okHttpClient(): OkHttpClient {
val okHttpClientBuilder = okHttpClientBuilder()
okHttpClientBuilder.addNetworkInterceptor { chain ->
val request = chain.request()
val response = chain.proceed(request)
if (response.code >= 400) {
handleNetworkError()
}
response
}
okHttpClientBuilder.addInterceptor { chain ->
val request = chain.request()
chain.proceed(request)
}
return okHttpClientBuilder.build()
}
fun createApiService(context: Context): ApiService {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(rxJava3CallAdapterFactory)
.client(okHttpClient())
.build()
return retrofit.create(ApiService::class.java)
}
}
}
调用请求( Activity 中):
ApiService.createMainWeatherApiService().getData(CustomParameter())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ res ->
handleSuccess()
},
{ error ->
// UnknownHostException!!!!
handleFail()
}
).apply { compositeDisposable.add(this) }
我在 okhttp 上创建了一个问题:
https://github.com/square/okhttp/issues/6591
最佳答案
您能否包含来自事件监听器的输出,该输出将显示 OkHttp(通常)使用系统 DNS 提供程序进行的 DNS 调用?
https://stackoverflow.com/a/66398516/1542667
[0 ms] callStart: Request{method=GET, url=https://httpbin.org/get}
[11 ms] proxySelectStart: https://httpbin.org/
[12 ms] proxySelectEnd: [DIRECT]
[12 ms] dnsStart: httpbin.org
[55 ms] dnsEnd: [httpbin.org/54.147.165.197, httpbin.org/34.231.30.52, httpbin.org/54.91.118.50, httpbin.org/18.214.80.1, httpbin.org/54.166.163.67, httpbin.org/34.199.75.4]
[62 ms] connectStart: httpbin.org/54.147.165.197:443 DIRECT
[176 ms] secureConnectStart
[747 ms] secureConnectEnd: Handshake{tlsVersion=TLS_1_2 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 peerCertificates=[CN=httpbin.org, CN=Amazon, OU=Server CA 1B, O=Amazon, C=US, CN=Amazon Root CA 1, O=Amazon, C=US] localCertificates=[]}
[765 ms] connectEnd: h2
[767 ms] connectionAcquired: Connection{httpbin.org:443, proxy=DIRECT hostAddress=httpbin.org/54.147.165.197:443 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=h2}
[775 ms] requestHeadersStart
[783 ms] requestHeadersEnd
[993 ms] responseHeadersStart
[994 ms] responseHeadersEnd: Response{protocol=h2, code=200, message=, url=https://httpbin.org/get}
[999 ms] responseBodyStart
[999 ms] responseBodyEnd: byteCount=267
[999 ms] connectionReleased
[1000 ms] callEnd
第二个请求可能会跳过这个,见下文,以重用连接。但在您的情况下,您希望它在建立新连接之前发出新的 DNS 请求。
[0 ms] callStart: Request{method=GET, url=https://httpbin.org/get}
[1 ms] connectionAcquired: Connection{httpbin.org:443, proxy=DIRECT hostAddress=httpbin.org/54.147.165.197:443 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=h2}
[1 ms] requestHeadersStart
[1 ms] requestHeadersEnd
[98 ms] responseHeadersStart
[99 ms] responseHeadersEnd: Response{protocol=h2, code=200, message=, url=https://httpbin.org/get}
[99 ms] responseBodyStart
[99 ms] responseBodyEnd: byteCount=267
[99 ms] connectionReleased
[99 ms] callEnd
如果它显示您在每次调用中都进行了查询,那么您很可能会在调用
InetAddress.getAllByName(hostname).toList()
时看到相同的行为。在你的程序中多次。你希望这会显示什么?
关于android - Android 11 更新后出现 UnknownHostException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66703751/
这个问题在这里已经有了答案: InetAddress.getLocalHost() throws UnknownHostException (9 个回答) 关闭 3 年前。 专用 Linux 服务器
我正在尝试在 CentOS 服务器上安装 hadoop。 我正在使用 that tutorial . 我在那条线上停了下来: bin/hadoop namenode –format 12/12/05
我的程序在一段时间内完美运行,但之后出现错误 java.net.UnknownHostException: www.sears.com at java.net.AbstractPlainSocketI
我正在制作一个程序,它从网站读取 html 并从 html 中提取一些内容。当我尝试启动套接字时,出现 UnknownHostException 错误。当我调用 InetAdress 方法时也会发生这
我正在尝试从处理草图发布到网站。 (处理基本上是在一个奇特的环境中运行的Java)。我正在使用这个库:http://libraries.seltar.org/postToWeb/但我不知道这是否有什么
我有一个代码,用于在 ftp 服务器上上传一些 txt。因此,如果我尝试使用此代码,有时有效,有时无效。 我有这个错误: 2015-06-17 20:43:33 DEBUG [LoggerFactor
我正在调用服务器任务,我想捕获所有与网络相关的异常。我收到java.net.ConnectException。我不知道从哪里 throw 和在哪里接住。 服务器类别: public class S
在感兴趣的程序中,在执行 method() 期间可能会发生一些与 HTTP 相关的异常。由于某些原因,该方法被设置为能够抛出 ExpException。我只对特定类型的异常感兴趣,即 UnknownH
我得到一个UnknownHostException(来自lookuphostbyname)。 这样做: result = httpClient.execute(httpGet, responseHan
我收到异常 java.net.UnknowHostException:http://arbitrary-hero.dyndns.org/。我正在尝试使用我制作的 android 客户端应用程序连接到该
我正在尝试从服务器获取数据。有时我的代码会由于 UnknownHostException 而失败。这是为什么?造成这个问题的原因是什么? 最佳答案 如果 DNS 服务器出现故障,则可能会发生这种情况。
我正在尝试从服务器获取数据。有时我的代码会由于 UnknownHostException 而失败。这是为什么?造成这个问题的原因是什么? 最佳答案 如果 DNS 服务器出现故障,则可能会发生这种情况。
我有一个 java 程序,它连接到一个网站以从中检索一些 XML。这在我的计算机以及我们公司以外的其他计算机上运行良好。我们的一位客户现在无法连接到该网站。我发现他们背后有一个代理。我现在已经找到了我
public static final String readURL(String url)throws Throwable { try { InputStre
在德国,我们有时会在域名中使用变异元音 (umlaut)。它是国际化域名 (IDN) 的一部分,例如 tile.öpnvkarte.de。 如果我尝试从那里下载一个 Tile,java 会抛出一个 j
在网络项目中。 我看到了日志: hadoop.hbase.zookeeper.ZKConfig - java.net.UnknownHostException: example.com at java
我是 Hadoop 和 Ubuntu 的新手。我已经为一个项目安装了 hadoop,但 NameNode 有一个异常(exception)。 当我在终端输入以下命令时: hadoop fs -mkdi
我正在尝试从服务器获取数据。有时我的代码会因 UnknownHostException 而失败。这是为什么?这个问题的原因是什么? 最佳答案 如果 DNS 服务器发生故障,则可能会发生这种情况。除了让
我正在使用 jdk1.6.0_23 安装 CSVN,但出现以下 Java 错误: 2011-02-10 16:25:50,951 [WrapperJarAppMain] WARN util.Grail
我正在使用下面的代码连接到一个 url。我在我的办公系统中执行它时收到此错误。但在我的个人笔记本电脑上它正在工作。我认为它必须与代理做一些事情。我有代理详细信息。但是如何在下面的代码中指定它? jav
我是一名优秀的程序员,十分优秀!