这是拦截器代码,我无法弄清楚在 logCat 上调用 response.close() 的位置,它指出错误出现在“response = chain.proceed(request)”上。我应该在哪里放置响应。 close() 调用还是我使用 closeQuietly()
AppInterceptor类:拦截器{
override fun intercept(chain: Interceptor.Chain): Response {
var request = chain.request()
try{
var response = chain.proceed(request)
var tryCount = 0
val maxTries = 5
while (!response.isSuccessful && tryCount < maxTries){
tryCount++
Thread.sleep(1500)
request = request.newBuilder().build()
response = chain.proceed(request)
}
return response
}catch (e: Exception){
e.printStackTrace()
val message: String
when (e){
is SocketTimeoutException ->{
message = Constants.SOCKET_TIMEOUT
}
is UnknownHostException ->{
message = Constants.UNKNOWN_HOST
}
is ConnectionShutdownException ->{
message = Constants.CONNECTION_SHUTDOWN
}
is IOException ->{
message = Constants.IO_EXCEPTION_MESSAGE
}
is IllegalStateException ->{
message = "${e.message}"
}
else ->{
message = "${e.message}"
}
}
return Response.Builder()
.request(request)
.protocol(Protocol.HTTP_1_1)
.code(999)
.message(message)
.body("{${e}".toResponseBody(null))
.build()
}
}
}
您应该在调用
chain.proceed(request)
方法之前关闭
所以你的代码会像这样
while (!response.isSuccessful && tryCount < maxTries){
tryCount++
request = request.newBuilder().build()
response.close() // here you need to add
response = chain.proceed(request)
}
更多信息可以看这个回答https://stackoverflow.com/a/31733634/5696047
我不知道你为什么添加
Thread.sleep(1500)
但我认为这不是必需的