android 无法在改造的错误正文中获取错误响应

o4tp2gmn  于 2022-12-21  发布在  Android
关注(0)|答案(4)|浏览(154)

我无法得到400响应在错误体的改造。我已经设置了日志记录水平,它显示在日志中,但不显示在错误体我已经搜索了很多,但没有找到任何解决方案是任何人有谁帮助我在这种情况下摆脱这个问题

call_.enqueue(object : Callback<ResponseBody> {
            override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) {
               if (response?.code() == 400) {
                      var jObjError: JSONObject? = null
                      try {
                          var jObjErrorr = response.errorBody().string()
                          CustomLogs.displayLogs("$TAG jObjErrorr: $jObjErrorr")
                      } catch (e: Exception) {
                      }

                      try {
                          val string = jObjError?.getstring("error_description")

                          CustomLogs.displayLogs("$TAG jObjError: $string")

                      } catch (e: Exception) {
                          e.printStackTrace();
                      }

                  }
 }

我需要错误体来获取和显示消息,我的日志显示此信息

{"error":"Authorize","error_description":"Error in authentication"}

但错误正文未显示此对象

bt1cpqcv

bt1cpqcv1#

正如IntelliJ Amiya在评论中提到你应该在onFailure方法中这样做。据我所知,在响应代码不在200范围内(200,201,202等)的情况下,不会调用Retrofit的onResponse,所以你对if (response?.code() == 400)的检查将永远不会返回true。

kxeu7u2r

kxeu7u2r2#

如果您浏览Retrofit onResponse Library...,其中明确提到Retrofit不会为状态代码低于200或高于300的响应创建正文。您必须具体指定错误响应!!

ycl3bljg

ycl3bljg3#

决定将其作为单独答复添加:

if (response?.code() == 400) {
    var jObjError: JSONObject? = null
    try {
        jObjError = response.errorBody().string()
        CustomLogs.displayLogs("$TAG jObjError: $jObjError")
    } catch (e: Exception) {
    }

    try {
        val string = jObjError?.optString("error_description")

        CustomLogs.displayLogs("$TAG jObjError: $string")

    } catch (e: Exception) {
        e.printStackTrace();
    }
}

你能试试这个碎片吗?

eivgtgni

eivgtgni4#

你可以在Kotlin这样做:

val errorResponse: ErrorMessage? = Gson().fromJson(
                response.errorBody()!!.charStream(),
                object : TypeToken<ErrorMessage>() {}.type
            )

相关问题