类型不匹配。要求:retrofit2.Response<*>!发现:okhttp3.Response ERROR in kotlin

问题描述 投票:0回答:0

我正在尝试处理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")
        }
    }
}
kotlin error-handling interceptor httpexception
© www.soinside.com 2019 - 2024. All rights reserved.