2016-12-01 37 views
1

在下面的代碼中,loadMoreStrings()方法在getLabelsFromServer()完成之前執行它的call()方法。我仍然在學習RxJava,但我無法讓它正常運行。爲什麼我的RxJava observable在它調用的函數完成之前發出結果?

private void fetchLabels() { 
     listObservable = Observable.fromCallable(new Callable<List<String>>() { 
      @Override 
      public List<String> call() { 
       return apiService.getLabelsFromServer(); 
      } 
     }).subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()); 
     loadMoreStrings(); 
    } 

    @Override 
    public void loadMoreStrings() { 
     stringListObservable.subscribe(new Action1<List<String>>() { 
      @Override 
      public void call(List<String> label) { 
       myStrings.addAll(label); 
      } 
     }); 
    } 

回答

0

因爲Observable類型是懶惰,它不會發出任何項目,直到您訂閱。

從您提供的代碼中,您沒有訂閱listObservable。所以它立即完成並且你的方法被調用。

+0

它在loadMoreStrings()方法中訂閱。 –

+0

如果'listObservable'和'stringListObservable'是相同的,並且你得到一個'onNext()'調用,那麼它工作正常,否則你會得到'onCompleted()'或'onError()' –

相關問題