Я не разработчик Android, но я поддерживаю некоторый код Android. У меня есть вызов API «doExist» с методом подписки. Если API возвращает ошибку, я хочу вызвать второй API, но внутри функции обратного вызова с ошибкой для подписки вызов не выполняется. Вызвана функция для создания запроса, но Чарльз показывает мне, что запрос фактически не выполняется. Я часами просматривал сообщения в блогах и stackoverflow и не нашел ответа.
код:
fun doesExistThenCreate(id: String) {
remoteCase.doesCaseExist(id)
.flatMap {
if (it) {
//some stuff
} else {
//create on 200 response but empty body
//this was the old way
remoteCase.createCase(id)
}
}
.subscribe({
//success actions
}, {
//doesExist returns 404, so call create.
//this is the new way, and it's not working
remoteCase.createCase(id)
})
Если API-интерфейс didCaseExist успешен, применяется flatMap, и часть кода в этом блоке также должна вызывать второй API-интерфейс. Этот всегда работает, когда doExist возвращает 200.
Исходный API-интерфейс doExist возвращал 200 с пустым телом, если "оно" не существует. Когда этого не существует, мы хотим его создать. Мы меняем API, чтобы он возвращал 404, когда «его» не существует, и мы хотим его создать. Вот почему вы видите два вызова для создания. Когда это будет работать правильно, тот, что в flatMap, исчезнет.
Я через несколько переписываний Чарльза подтвердил, что именно ответ 404 заставляет его входить в ответный вызов ошибки подписки. Когда я отлаживаю, я могу проследить весь путь до момента фактического вызова API, но это не так. По какой-то причине он пропускает второй вызов, когда первый бросает 404.
Очевидно, что я хочу, чтобы получилось так, что если didCaseExist получит 404, я хочу, чтобы createCase в обратном вызове ошибки подписчика работал. Я не уверен, что это проблема с многопоточностью, неправильно ли я обращаюсь с 404, или просто не понимаю, как подписаться (все это вполне возможно).
Спасибо за помощь. Я в тупике.