如何动态处理Retrofit中的错误



在我的应用程序中,我使用Retrofit库连接到服务器,有时显示我错误验证或其他原因…
错误消息格式如下:

{
"message": "The given data was invalid.",
"errors": {
"login": [
"Email or phone is not valid"
]
}
}

登录对象在其他API中更改,可能显示密码篮子,或其他…
我知道我可以用上面的Json创建错误类Gsonlibrary converterrorBody展示给大家看!
但是我不想为每个API创建一个新类!
我想创建一个通用类,并获得所有的错误消息从错误字段的Json并展示给用户!

My NetworkResponse类:

open class NetworkResponse<T>(private val response: Response<T>) {
fun generalNetworkResponse(): NetworkRequest<T> {
return when {
response.code() == 401 -> NetworkRequest.Error("You are not authorized")
response.code() == 422 -> NetworkRequest.Error("Api key not found!")
response.code() == 500 -> NetworkRequest.Error("Try again")
response.isSuccessful -> NetworkRequest.Success(response.body()!!)
else -> NetworkRequest.Error(response.message())
}
}
}

如何处理Retrofit的动态错误?

创建一个名为ApiError的类

data class ApiError(
val message: String?,
val errors: Map<String, List<String>>?
)

在Retrofit Callback实现中,您可以使用Gson库将错误响应解析为ApiError的实例。下面是一个例子:


class MyCallback : Callback<MyResponse> {
override fun onResponse(call: Call<MyResponse>, response: Response<MyResponse>) {
// handle success response...
}
override fun onFailure(call: Call<MyResponse>, t: Throwable) {
// handle network error...
}
override fun onFailure(call: Call<MyResponse>, response: Response<MyResponse>) {
if (response.errorBody() != null) {
try {
val apiError = Gson().fromJson(response.errorBody()!!.string(), ApiError::class.java)
// handle API error...
val errorMessage = apiError.message
val errors = apiError.errors
// You can iterate through the map of errors and display them to the user
errors?.forEach { (field, fieldErrors) ->
// display field errors to user
}
} catch (e: IOException) {
// handle parsing error...
}
} else {
// handle unexpected error...
}
}
}

相关内容

最新更新