Обещания для Android?
Как вы сталкиваетесь с вложенными обратными вызовами в Android? Например, в моем приложении я использую Locations API, а затем, когда у меня есть текущий lat-lng, я делаю HTTP-запрос на свой сервер. В этой ситуации у меня есть два вложенных обратных вызова. Это не так плохо, но что, если у меня было три или больше? Я читал об этом в этом вопросе, но мне интересно, есть ли что-то вроде обещаний для Android.
Все, что я нашел, это. Кто-то знает больше о предмете?
Ответы
Ответ 1
Есть что-то довольно похожее, уже доступное как часть языка Java и поддерживаемое Android: java.util.concurrent.Future. Возможно, это достаточно хорошо для ваших нужд.
Кстати, Java 8, который Android еще не поддерживает, имеет вариант под названием CompletableFuture, который еще ближе к обещанию.
Ответ 2
Это очень старый пост, но я хочу поделиться своей проблемой и решением здесь.
У меня есть аналогичная проблема, мне нужно выполнить 4 сетевых задачи один за другим во время входа в мое приложение и, наконец, когда все запросы успешно открывают экран приземления приложения. Первоначально я использовал вложенный обратный вызов, но теперь я нашел новую андроид-обещающую библиотеку https://github.com/crawlinknetworks/android-promise, которая решила мою проблему. Он очень прост в использовании.
После: Как он работает?
doSomeTask(int someValue, String extra)
.then(res -> doSecondTask((MyObject) res)) // res is result form doSomeTask()
.then(res -> doThirdTask((OtherObject) res))) // res is result form doThirdTask()
.then(res -> doFourthTask((int) res))) // res is result form doThirdTask()
.then(res -> doFivthTask())
.then(res -> {
// Consume result of the previous function
return true; // done
})
.error(err -> handleError()); // Incase of any p.reject()
// all from above function error will be available here
Ответ 3
RxJava, вероятно, является наиболее поддерживаемым и документированным решением для Android. Версия для Android: https://github.com/ReactiveX/RxAndroid