2017-07-07 52 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() 
相关问题