【发布时间】:2019-01-24 09:08:46
【问题描述】:
我有两个与 flatMap 合并的观察者。第一个观察者返回一个在调用第二个观察者时使用的值。
Observable<Integer> mergedObservers = firstAPI.getFirstInfo(userLat, userLong)
.flatMap(resultFirstObservable -> {
try {
return secondApi.getSecondInfo(resultFirstObservable.body().string(), "3")
.onErrorResumeNext(e -> {
e.printStackTrace();
return secondApi.getSecondInfo("defaultValue", "3");
});
} catch (IOException e) {
e.printStackTrace();
secondApi.getSecondInfo("defaultValue", "3")
.onErrorResumeNext(e -> {
e.printStackTrace();
return secondApi.getSecondInfo("defaultValue", "3");
});
});
}
}, (resultFirstObservable, resultSecondObservable) -> {
try {
return transformToWhatINeed(resultSecondObservable.body().string());
} catch (IOException ex) {
ex.printStackTrace();
return transformToWhatINeed([]);
}
});
userLat 和 userLong 在我的方法之外声明,并在活动打开期间更改,但我的订阅仅考虑其中的第一个值。我原以为每次有新调用时,它们都会采用最新的值。
我做错了什么?
【问题讨论】:
-
你试过使用 combineWithLatest 吗?
-
@ArchieG.Quiñones 我已经研究了几个小时,但找不到解决方案。我认为我应该为该位置创建一个 Observable,并且在每次调用 subscribe 时,向第一个 API 提供该位置,但不推荐直接创建一个 Observable。
-
我不明白这是怎么回事.. Observable.combineLatest(firstobservable, secondobservable,
) -
我想我误解了你的问题。所以为了澄清你希望每次你的 userLong 和 userLat 改变值时。你应该从流中得到另一个值。对吗?
-
@ArchieG.Quiñones 是的。用户改变了他的位置,如果在第二次调用 Observable 时纬度和经度发生了变化,则应该使用新位置调用 API。如果我这样放置变量,Observable 将仅使用参数的第一个值进行调用,并且在它们发生变化时不会更改它们。
标签: java android rx-java observable rx-android