在RxJava/RxAndroid中传递观测值之间的响应
我有以下代码:在RxJava/RxAndroid中传递观测值之间的响应,java,android,rx-java,rx-java2,Java,Android,Rx Java,Rx Java2,我有以下代码: getLocationObservable() // ---> async operation that fetches the location. // Once location is found(or failed to find) it sends it to this filter : .filter(location -> { // ---> I want to use this location in the the onNext in th
getLocationObservable() // ---> async operation that fetches the location.
// Once location is found(or failed to find) it sends it to this filter :
.filter(location -> { // ---> I want to use this location in the the onNext in the end
after finishing some calculation here, I either return 'true' and continue
to the next observable which is a Retrofit server call, or simply
return 'false' and quit.
})
.flatMap(location -> getRetrofitServerCallObservable( location )
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
new Observer<MyCustomResponse>() {
@Override
public void onSubscribe(Disposable d) {
_disposable = d;
}
@Override
public void onNext(MyCustomResponse response) {
// I want to be able to use the `location` object here
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
获取位置的异步操作。
//一旦找到(或未能找到)位置,它会将其发送到此筛选器:
.filter(位置->{/->我希望最终在onNext中使用此位置
在这里完成一些计算之后,我要么返回'true'并继续
到下一个可观察的服务器调用,或者
返回“false”并退出。
})
.flatMap(位置->GetServerCallObservable(位置)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(
新观察员(){
@凌驾
认购的公共无效(一次性d){
_一次性=d;
}
@凌驾
public void onNext(MyCustomResponse响应){
//我想在这里使用'location'对象
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});
我希望能够使用第3行(第一个可观察对象)中的位置
对象,在第二个可观察对象触发的“onNext”中。
我没办法解决这个问题。。任何帮助都将不胜感激。代替
getServerCallObservable(位置)
您可以将结果映射为响应和位置的一对(来自您最喜爱的库):
getServerCallObservable(location).map(response->Pair.create(location,response))
然后,在您的onNext
中,您将收到Pair
实例
如果您不想使用
对
类,您可以使用对象[]
,但如果您想使用,请不要告诉我:p您是否可以更改MyCustomResponse
以包含位置
?这是从改装响应返回的转换json到POJO类对象(改装可观察),所以它不是真正可定制的..它工作了,谢谢你)顺便说一句,只是为了学习,使用Pair
s ion general有什么缺点吗?性能方面,您为每个元素分配了一个额外的对象,但是如果您选择了一个高效的实现(或者一种内置了类似Scala的Tuple2
)的结构的JVM语言),我就不会太担心了。另一种选择是在整个flatMap
调用中编写一个闭包,将位置始终保持在作用域内,但这不会产生漂亮的代码。