问题:一旦返回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