Java 如何将可变参数传递给观察者?
我有两个与平面图合并的观察者。第一个观察者返回在调用第二个观察者时使用的值Java 如何将可变参数传递给观察者?,java,android,rx-java,observable,rx-android,Java,Android,Rx Java,Observable,Rx Android,我有两个与平面图合并的观察者。第一个观察者返回在调用第二个观察者时使用的值 Observable<Integer> mergedObservers = firstAPI.getFirstInfo(userLat, userLong) .flatMap(resultFirstObservable -> { try { return secondApi.getSecondInfo(resultFirstObservable.body().string(),
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([]);
}
});
Observable mergedObservers=firstAPI.getFirstInfo(userLat,userLong)
.flatMap(resultFirstObservable->{
试一试{
返回secondApi.getSecondInfo(resultFirstObservable.body().string(),“3”)
.onErrorResumeNext(e->{
e、 printStackTrace();
返回secondApi.getSecondInfo(“defaultValue”,“3”);
});
}捕获(IOE异常){
e、 printStackTrace();
secondApi.getSecondInfo(“defaultValue”,“3”)
.onErrorResumeNext(e->{
e、 printStackTrace();
返回secondApi.getSecondInfo(“defaultValue”,“3”);
});
});
}
},(resultFirstObservable,resultSecondObservable)->{
试一试{
返回TransformToWhatined(resultsCondobservable.body().string());
}捕获(IOEX异常){
例如printStackTrace();
将转换返回到指定的([]);
}
});
userLat和userLong在我的方法之外声明,并在活动打开期间更改,但我的订阅只考虑它们的第一个值。我希望每次有新的呼叫时,他们都会接受最新的值
我做错了什么?您的方法应该是:
Observable.combineLatest(userLatObservable, userLongObervable, yourmergerfunction).flatmap( lat, long –> firstApi.get(lat, long))... Etc..
我想你的问题是如何得到userLat和userLong的值。。。这些值应首先转换为可观测值,以将它们加入到链中。如果我正确理解您的问题,请使用Observable.defer解决问题
Observable<Integer> mergedObservers = Observable.defer {
firstAPI.getFirstInfo(userLat, userLong)
}.flatMap ...
Observable=Observable.defer{
getFirstInfo(userLat,userLong)
}.平面地图。。。
你试过使用combineWithLatest吗?@ArchieG.Quiñones我已经研究了几个小时,没有找到解决方案。我想我应该为这个位置创建一个可观察的对象,在每次调用subscribe时,向第一个API提供这个位置,但是直接创建一个可观察的对象是不可取的。我不明白这是怎么回事。。我想我误解了你的问题。。因此,为了澄清,您希望每次您的userLong ans userLat更改值。。您应该从流中获取另一个值。。“我说得对吗?”阿奇格·奎尼翁说,是的。用户改变了他的位置,如果纬度和经度在第二次调用Observable时发生了变化,则应使用新位置调用API。如果我这样放置变量,可观察对象将仅使用参数的第一个值进行调用,而不会在参数发生更改时更改它们。