Android RxJava使用带间隔的动态变量
在我的RxJava代码中,我创建了一个具有间隔的可观察对象。代码如下所示:Android RxJava使用带间隔的动态变量,android,reactive-programming,rx-java,rx-android,Android,Reactive Programming,Rx Java,Rx Android,在我的RxJava代码中,我创建了一个具有间隔的可观察对象。代码如下所示: public class GetProducts implements RxRequest<Observable<ProductsResult>> { private LatLng markerLocationToReport; private static int TIMER = 5; private static GetProducts INSTANCE = ne
public class GetProducts implements RxRequest<Observable<ProductsResult>> {
private LatLng markerLocationToReport;
private static int TIMER = 5;
private static GetProducts INSTANCE = new GetProducts();
public static GetProducts getInstance() {
return INSTANCE;
}
private Observable obs;
private GetProducts() {
}
@Override
public Observable<ProductsResult> getObservable() {
if (obs == null) {
obs = Observable.interval(0, TIMER, TimeUnit.SECONDS, Schedulers.io())
.flatMap((tick) -> Observable.just(GetProductsRequest.getProducts(markerLocationToReport)))
.retry()
.observeOn(AndroidSchedulers.mainThread()).publish();
((ConnectableObservable) obs).connect();
}
return obs;
}
public void setMarkerLocationToReport(LatLng markerLocationToReport) {
this.markerLocationToReport = markerLocationToReport;
}
}
公共类GetProducts实现RxRequest{
私人车床标记位置报告;
专用静态整数定时器=5;
私有静态GetProducts实例=新GetProducts();
公共静态GetProducts getInstance(){
返回实例;
}
私有可观测obs;
私人产品(){
}
@凌驾
公共可观察的getObservable(){
如果(obs==null){
obs=可观察的.interval(0,TIMER,TimeUnit.SECONDS,Schedulers.io())
.flatMap((勾选)->可观察的.just(GetProductsRequest.getProducts(markerLocationToReport)))
.重试()
.observeOn(AndroidSchedulers.mainThread()).publish();
((ConnectableObservable)obs.connect();
}
返回obs;
}
公共无效设置markerLocationToReport(LatLng markerLocationToReport){
this.markerLocationToReport=markerLocationToReport;
}
}
我的问题是,如何在我的flatMap
函数中使用markerLocationToReport
的当前值?
因为在当前代码中,当请求由GetProductsRequest.getProducts(markerLocationToReport)
发出时,当创建了可观察的
并且我需要在我的应用程序生命周期中更新它时,始终使用markerLocationToReport
的初始值
Thank's首先,我看到了几场比赛:1)
markerLocationToReport
应该是易变的,以便flatMap
的功能可以正确地观察它;2) 除非从单个线程调用getObservable
,否则它可能会创建定时操作的多个实例
此外,您可以使用方便的
.publish().autoConnect(0)
,它将立即连接,您不必强制转换到可连接的可观察的很好地了解,我尝试了volatile
,但当我更新变量时,当我输入getProduct()方法时,它将保持为空,这很奇怪。你确定lambda捕捉到了正确的变量?最终volatile成功了。我的同事没有把一切都告诉我。所以谢谢你