Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RxJava使用带间隔的动态变量_Android_Reactive Programming_Rx Java_Rx Android - Fatal编程技术网

Android 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

在我的RxJava代码中,我创建了一个具有间隔的可观察对象。代码如下所示:

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成功了。我的同事没有把一切都告诉我。所以谢谢你