我正在尝试处理http错误,我已经为它创建了一些类和接口,我也有一个拦截器,我已经通过互联网把它带到了一个地方,但是我遇到了以下错误.
类型不匹配。要求:retrofit2.Response<*>!成立: okhttp3.Response
当我退货时
override fun intercept(chain: Interceptor.Chain): retrofit2.Response /*<-error occurs hear*/{
...
}
出现这个错误
Response 类需要一个类型参数
我的拦截器
class AuthInterceptor @Inject constructor(
private val tokenManager: TokenManager,
private val errorHandler: MyErrorHandler
): Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
try {
val token = runBlocking {
tokenManager.getToken().first()
}
val requestBuilder = chain.request().newBuilder()
requestBuilder.addHeader("Authorization", "Bearer $token")
val request = requestBuilder.build()
val response = chain.proceed(request)
if (!response.isSuccessful) {
val error = errorHandler.handle(HttpException(response)) //<- this error occurs Type mismatch. Required: retrofit2.Response<*>! Found: okhttp3.Response hear
throw error
}
return response//chain.proceed(request.build())
}catch (e:java.lang.Exception){
val error = errorHandler.handle(e)
throw error
}
}
}
ErrorHandler 接口
interface ErrorHandler {
fun handle(throwable: Throwable): MyDomainError
}
错误密封类
sealed class MyDomainError(message:String) : Throwable(message) {
object NetworkError : MyDomainError("Network Error")
data class HttpError(val statusCode: Int, override val message: String) : MyDomainError(message)
data class CustomError(override val message: String) : MyDomainError(message)
}
错误处理程序
class MyErrorHandler : ErrorHandler {
override fun handle(throwable: Throwable): MyDomainError {
return when (throwable) {
is SocketTimeoutException -> MyDomainError.NetworkError
is UnknownHostException -> MyDomainError.NetworkError
is HttpException -> {
val code = throwable.code()
//val message = throwable.message() ?: ""
when (code) {
502 -> MyDomainError.HttpError(code, "Sunucu geçici bir hatayla karşılaştı ve isteğinizi tamamlayamadı")
400 -> MyDomainError.HttpError(code, "Tarayıcınız, bu sunucunun anlayamadığı bir istek gönderdi.")
409 -> MyDomainError.HttpError(code, "Bir hata ile karşılaşıldı.")
403 -> MyDomainError.HttpError(code, "http hatası ile karşılaşıldı.")
500 -> MyDomainError.HttpError(code, "Internal Server Error")
405 -> MyDomainError.HttpError(code, "Method Not Allowed")
404 -> MyDomainError.HttpError(code, "Not Found")
503 -> MyDomainError.HttpError(code, "Service Unavailable")
401 -> MyDomainError.HttpError(code, "Unauthorized")
else -> MyDomainError.CustomError("Bir hata ile karşılaşıldı")
}
}
else -> MyDomainError.CustomError(throwable.message ?: "Bilinmeyen hata")
}
}
}