Невозможно получить ответ об ошибке в теле ошибки модификации - PullRequest
1 голос
/ 22 октября 2019

Я не могу получить 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"}

, но тело ошибки не показывает этот объект

Ответы [ 3 ]

2 голосов
/ 22 октября 2019

Как отметил IntelliJ Amiya в комментарии к вашему исходному сообщению, вы должны сделать это методом onFailure. Насколько я знаю, Retrofit onResponse не будет вызываться в случаях, когда код ответа не находится в диапазоне 200 (200, 201, 202 и т. Д.), Поэтому проверка if (response?.code() == 400) никогда не вернет true.

0 голосов
/ 31 октября 2019

Если вы проходите через библиотеку Retrofit onResponse ..., четко упоминается, что Retrofit не создает Body для ответа с кодом состояния ниже 200 или выше 300. Вы должны указать свою ошибку Response Specificically !!

0 голосов
/ 22 октября 2019

Решили добавить его как отдельный ответ:

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();
                  }

              }

Не могли бы вы попробовать этот фрагмент?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...