【发布时间】:2021-06-16 14:25:38
【问题描述】:
问题:一旦返回 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)
}
}
}
呼叫请求(活动中):
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
【问题讨论】:
-
如果手机出现错误。在不重新安装或关闭应用程序的情况下切换到 WiFi 或 4G 是否有效?在同一部手机上尝试 2 3 种不同的 WiFi ..!
-
我遇到过类似的问题,那就是 Godaddy SSL 问题。切换到亚马逊 ssl 解决了这个问题。但在我的场景中切换到 WiFi 有时会奏效。我测试了 3 4 WiFi。
-
@RohaitasTanoli 我会尝试更改域,谢谢您的建议
-
我从 Godaddy 转到另一家公司,但出现了同样的症状。
-
嗯,看来我也有同样的问题。三星 android 11 上的 2 位用户报告了类似的问题,一周内应用程序中的所有请求均未成功,并出现互联网连接错误。重新安装应用程序有帮助。
标签: android retrofit2 okhttp galaxy android-11