2017-07-07 101 views
0
 getRemarks(licensePlate) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribeOn(AndroidSchedulers.mainThread()) 
      .subscribe(response -> { 
       Store.remarks(response); 
      }, throwable -> { 
       Timber.e("Error", throwable); 
      }); 

    public static Observable<List<Remark>> getRemarks(String number) { 
     return getApiService().getRemarks(number); 
    } 

所以,現在這是我的代碼,但我需要等到這個方法得到響應後再繼續執行代碼。正如我看到的,我需要.toBlocking(但它無限期地阻止了我的代碼),並且我在某處閱讀了我需要的.forEach方法,但不知道如何使用它。RxJava在繼續之前等待響應被檢索

+0

你是否工作正常? –

回答

0

而不是subscribe使用:

.toBlocking() 
.forEach(new Action1<List<Remark>>() { 
    @Override 
    public void call(List<Remark> remarks) { 
     Store.remarks(remarks); 
    } 
}); 

無論如何,除非你正在使用這個測試,我會避免使用toBlocking,我會尋找不同的策略。 toBlocking,的確,返回BlockingObservable,作爲documentation says

它可以用於測試和演示目的是有用的,但一般 不適合生產應用。

考慮利用RxJava的實力,通過流組合。你可以採取的瞭解一下here這對組合的可用選項Observable小號

0

如果getRemarks()使用改裝,那麼你可以這樣做以下這將同步執行(你將需要在非UI線程如果要運行你這樣做是爲了避免NetworkOnMainThreadException

getApiService().getRemarks(number).execute() 
相關問題