在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
调用中编写一个闭包,将
位置始终保持在作用域内,但这不会产生漂亮的代码。