我有两个与flatMap合并的Observer。第一个观察者返回一个值,该值在第二个观察者被调用时使用。
SELECT u.* from users u
INNER JOIN regulations r1 ON r1.user_id=u.id and r1.accepted=1 and r1.regulation=1
INNER JOIN regulations r2 ON r2.user_id=u.id and r2.accepted=1 and r2.regulation=2
INNER JOIN regulations r3 ON r3.user_id=u.id and r3.accepted=1 and r3.regulation=3
INNER JOIN regulations r4 ON r4.user_id=u.id and r4.accepted=1 and r4.regulation=4
userLat和userLong在我的方法之外声明,并且在活动打开期间被更改,但是我的订阅仅考虑了它们的第一个值。我本来希望每次有新呼叫时,它们都会采用最新的值。
我在做什么错了?
答案 0 :(得分:1)
如果我了解到您正确地使用Observable.defer应该可以解决问题
Observable<Integer> mergedObservers = Observable.defer {
firstAPI.getFirstInfo(userLat, userLong)
}.flatMap ...
答案 1 :(得分:0)
您的方法应类似于:
Observable.combineLatest(userLatObservable, userLongObervable, yourmergerfunction).flatmap( lat, long –> firstApi.get(lat, long))... Etc..
我认为您的问题是,如何获取userLat和userLong的值...这些值应首先转换为Observables,以将它们加入链中。