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方法,但不知道如何使用它。
发布于 2017-07-07 17:54:28
而不是使用subscribe:
.toBlocking()
.forEach(new Action1<List<Remark>>() {
@Override
public void call(List<Remark> remarks) {
Store.remarks(remarks);
}
});无论如何,除非你是用它来测试,否则我会避免使用toBlocking,我会寻找不同的策略。实际上,toBlocking会返回一个作为documentation says的BlockingObservable
它可用于测试和演示目的,但通常不适用于生产应用程序。
考虑通过流组合来开发RxJava的真正功能。您可以查看here以了解哪些是组合Observable的可用选项
发布于 2017-07-07 18:00:34
如果getRemarks()正在使用改进,那么你可以像下面这样做,它将同步执行(如果你这样做是为了避免NetworkOnMainThreadException,你将需要在非UI线程中运行)
getApiService().getRemarks(number).execute()https://stackoverflow.com/questions/44967192
复制相似问题