Модифицируйте обработку ошибок с помощью различных типов ответов

#android #kotlin #retrofit2

Вопрос:

У меня есть два разных ответа на два разных сценария. Один из сценариев заключается в том, что я получаю JSONArray в качестве ответа

 [ {  "type" : "cat",   "color": "black"  },   {  "type" : "cat",  "color": "white"  } ]  

это нормальный ответ, который я должен получить. Но если ответ недоступен для тела, которое я отправляю, я получаю следующий ответ.

 { "message" : "response not available for this date" }  

это запрос на публикацию, который у меня есть

 @POST("user/userTimetable")  fun getTypeApi(@HeaderMap headers: Maplt;String, Stringgt;, @Body body: ScheduleBody?) : Call lt;Listlt;Typegt;gt;  

Когда я получаю последний ответ, я получаю сбой

 java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $  

Как мне работать с этим типом ответа на kotlin?

Ответ №1:

Дооснащение не будет предсказывать ответ, поэтому либо вы устанавливаете тип результата ResponseBody с типом объекта, либо меняете серверную часть, чтобы отправить вариант по умолчанию, который реализует сообщение об ошибке и данные.

Ответ №2:

У меня когда-то была эта проблема, пожалуйста, следуйте приведенному ниже коду

  1. создайте класс модели под названием ErrorResponse, который будет возвращать приведенные выше данные и изменять их, чтобы показывать только ваш ответ на сообщение.

введите описание изображения здесь

  1. создайте класс ErrorResponseService, который будет использоваться для сопоставления сообщения об ошибке с возвращаемым ответом.

введите описание изображения здесь

  1. Затем выполните эту реализацию в своем вызове модернизации, чтобы получить сообщение об ошибке при сбое ответа.

введите описание изображения здесь

Комментарии:

1. Старайтесь не использовать скриншоты для отображения кода.

2. Где именно мы делаем шаг 3? Это не совсем ясно

3. используйте его в обратном вызове onResponse, как только вы проверите, успешно ли получен ответ.затем используйте приведенный выше код, чтобы отобразить свой ответ для отображения сообщения об ошибке

4. Из-за сбоя, о котором я упоминал, он не включается в обратный вызов onResponse. и это входит в обратный вызов OnFailure. Я попытался изменить тип возврата getTypeApi на ErrorResponse, а затем он перешел в обратный вызов onResponse.