在我的RxJava代码上,我创建了一个带间隔的Observable。代码如下所示:
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;
}
}
我的问题是,如何在markerLocationToReport
函数中使用flatMap
的当前值?
因为在当前代码中GetProductsRequest.getProducts(markerLocationToReport)
发出请求时,在创建markerLocationToReport
时始终使用Observable
的初始值,我需要在应用生命周期内更新它。
谢谢
答案 0 :(得分:2)
首先,我看到几场比赛:1)markerLocationToReport
应该是易变的,因此flatMap
的功能可以正确地观察它; 2)除非你从一个线程中调用getObservable
,否则它可能会创建多个定时操作实例。
此外,您可以使用便捷.publish().autoConnect(0)
,它会立即连接,您也不必投放到ConnectableObservable
。