RXJava停止可在flatmap内观察

RXJava停止可在flatmap内观察,java,android,rx-java,rx-java2,rx-android,Java,Android,Rx Java,Rx Java2,Rx Android,我制作了一个地理标签社交报告应用程序,在Android上报告破碎的街道。发布报告需要位置数据。从photo的Exif、Gps传感器或从MapsPickerActivity手动设置 我设法使用库发出位置请求。当应用程序仍然从Gps获取位置时,有一个按钮被启用。由于从Gps获取位置数据可能需要一段时间,我允许用户同时手动设置位置。如果用户按下按钮,我想停止getGpsLocationObservable。如果我不停止getGpsLocationObservable,我担心该进程仍在运行,并且在设置自

我制作了一个地理标签社交报告应用程序,在Android上报告破碎的街道。发布报告需要位置数据。从photo的Exif、Gps传感器或从MapsPickerActivity手动设置

我设法使用库发出位置请求。当应用程序仍然从Gps获取位置时,有一个按钮被启用。由于从Gps获取位置数据可能需要一段时间,我允许用户同时手动设置位置。如果用户按下按钮,我想停止getGpsLocationObservable。如果我不停止getGpsLocationObservable,我担心该进程仍在运行,并且在设置自定义位置后会出现。那会很烦人。 我怎样才能做到这一点

下面是简化代码的片段

主要一次性用品:

Disposable myDisposable=imageProcessingObservable()
.compose(getExifLocationTransformer())//此处已启用自定义位置按钮
.filter(isLocationSet->isLocationSet)
.flatmap(x->getGpsLocationObservable());
RxLocation GetGPSlocation可观测:

private Observable getGpsLocationObservable(){
locationRequest=locationRequest.create()
.setPriority(定位请求。优先级高精度)
.SetNumUpdate(1)
.设定间隔(3000);
rxLocation=新的rxLocation(PostActivity.this);
rxLocation.setDefaultTimeout(10,时间单位为秒);
返回rxLocation.settings()
.检查和手柄解决方案(位置请求)
.flatMapObservable(已激活->{
如果(已激活){
返回位置setingsactivatedobservable();
}
else locationNotFoundObservable();
});
}
@SuppressLint(“丢失许可”)
私有可观测位置设置激活可观测(){
返回rxLocation.location()更新(locationRequest)
.地图(位置->{
LatLng LatLng=新LatLng(location.getLatitude(),location.getLongitude());
String street=getStreetName(latLng);
返回街;;
})
.doOnNext(街道->{
新地(街);;
});
}

我想这是.amb()操作符的一个很好的使用案例,它只获取开始发射的可观测数据的输出,而忽略所有其他数据。请参见

您有代码吗?代码很长,很难看。我将整个过程链接到一个可观察的平台上,从gallery/camera拍摄照片后对其进行处理(压缩、旋转、保存到文件提供程序),然后将其转换为exif reader以获取位置数据。如果失败/未找到,请使用GPS将可观察对象平面映射到GetLocation。我在exifreader complete/error上启用“拾取自定义位置”按钮。但好吧,我会尝试嵌入代码。看看
takeUntil
,然后使用按钮的点击事件作为源。@akarnokd是的,这正是我要找的。事实上,我对RxJava还很陌生(大约两周前才开始学习),我甚至不需要阅读每个操作员的文档。在第一周学习Rx编程的基本概念时,完全不知所措。谢谢我最终创建了一个PublisherSubject,每当按下按钮时,它都会发送真值。然后将其放入takeUntil操作符的getGpsLocationObservable中。我认为它更适合我当前的用例,或者更简单。无论如何谢谢你