2015-11-02 66 views
0

的動態變量在我的RxJava代碼中,我創建了一個具有間隔的Observable。代碼如下所示: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; 
    } 
} 

我的問題是,我該如何使用的markerLocationToReport當前值在我flatMap功能? 因爲在當前代碼中請求由GetProductsRequest.getProducts(markerLocationToReport)發出時,創建Observable時始終使用初始值markerLocationToReport,我需要在應用生命週期中更新它。

感謝的

回答

2

首先,我看到了幾場比賽:1)markerLocationToReport應該是揮發性所以flatMap的功能也可正常觀察它; 2)除非您從單個線程調用getObservable,否則它可能創建定時操作的多個實例。

此外,您可以使用方便.publish().autoConnect(0)這將立即連接,你不必投到ConnectableObservable

+0

不知道,我用'volatile'試過,但是當我更新我的變量時,它保持爲空,當我進入getProduct()方法時 –

+0

奇怪。你確定lambda捕獲正確的變量? – akarnokd

+0

最後是易變的作品。我的同事沒有告訴我所有的事情。所以謝謝 –