首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从errorBody中保留HttpException

从errorBody中保留HttpException
EN

Stack Overflow用户
提问于 2022-01-24 23:04:43
回答 1查看 150关注 0票数 0

我正在尝试将错误体从一个异常映射到一个有用的模型中,并使用moshi和retrofit 2.9.0。

我发现了许多讨论相同问题的帖子,但是没有一个解决方案对我有用。

我的代码如下

代码语言:javascript
复制
private fun getErrorMessageFromGenericResponse(httpException: HttpException): String? {
    var errorMessage: String? = null
    try {
        val body = httpException.response()!!.errorBody()!!
        val errorResponse = body.string().toObject(ErrorResponse::class.java)
        errorMessage = errorResponse?.message
    } catch (e: IOException) {
        e.printStackTrace()
    } finally {
        return errorMessage
    }
}

fun <T> String.toObject(objectClass: Class<T>): T? {
    val moshi = Moshi.Builder().build()
    val adapter = moshi.adapter(objectClass).lenient()
    return adapter.fromJson(this)
}

我也试过使用这个,但它也不起作用:

代码语言:javascript
复制
httpException.response()!!.errorBody()!!.source().buffer.snapshot().utf8()

我可能错过了一些非常简单的东西,因为我认为这是一个常见的用法。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-01-25 02:53:12

代码语言:javascript
复制
fun handleErrorResponse(e: Throwable): String {

    return when (e) {
        is HttpException -> {
            parseHTTPError(e.response()!!.errorBody())
        }

        is SocketTimeoutException -> {
            ApiConstants.TIME_OUT
        }

        is IOException -> {
            ApiConstants.SERVERERROR
        }
        else -> ApiConstants.SERVERERROR
    }
}

fun parseHTTPError(responseBody: ResponseBody?): String {
    try {
        val jsonObject=JSONObject(responseBody!!.string())
        try {
            val error=jsonObject.getJSONArray("message")
            return error[0].toString()
        } 

{ responseBody!!.close()返回“} responseBody.close()返回”}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70841548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档