Обещания для 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