在继续之前,RxJava等待检索响应

时间:2017-07-07 09:24:36

标签: android rx-java

        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方法但不知道如何使用它。

2 个答案:

答案 0 :(得分:1)

而不是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 s

的可用选项

答案 1 :(得分:0)

如果getRemarks()正在使用改造,那么你可以执行类似跟随的操作,这将同步执行(如果你这样做,你将需要在非UI线程中运行以避免NetworkOnMainThreadException

getApiService().getRemarks(number).execute()