#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:
У меня когда-то была эта проблема, пожалуйста, следуйте приведенному ниже коду
- создайте класс модели под названием ErrorResponse, который будет возвращать приведенные выше данные и изменять их, чтобы показывать только ваш ответ на сообщение.
- создайте класс ErrorResponseService, который будет использоваться для сопоставления сообщения об ошибке с возвращаемым ответом.
- Затем выполните эту реализацию в своем вызове модернизации, чтобы получить сообщение об ошибке при сбое ответа.
Комментарии:
1. Старайтесь не использовать скриншоты для отображения кода.
2. Где именно мы делаем шаг 3? Это не совсем ясно
3. используйте его в обратном вызове onResponse, как только вы проверите, успешно ли получен ответ.затем используйте приведенный выше код, чтобы отобразить свой ответ для отображения сообщения об ошибке
4. Из-за сбоя, о котором я упоминал, он не включается в обратный вызов onResponse. и это входит в обратный вызов OnFailure. Я попытался изменить тип возврата getTypeApi на ErrorResponse, а затем он перешел в обратный вызов onResponse.