不使用.filter方法过滤Observable

时间:2015-08-20 19:08:09

标签: rx-java rx-android

我使用RxAndroid编写以下代码:

 Observable.from(check())
                .filter(new Func1<Response, Boolean>() {
                    @Override
                    public Boolean call(Response response) {
                        Log.d(TAG, "******* " + response.getStatus());
                        return true;
                    }
                })

            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Response>() {
                @Override
                public void onCompleted() {
                }

                @Override
                public void onError(Throwable e) {


                }

                @Override
                public void onNext(Response response) {

                }
            })
            ;

Observable.filter()方法由于某种原因未被调用。

有关此的任何提示吗?

1 个答案:

答案 0 :(得分:0)

在您的示例当前编写的方式中,看起来您有竞争条件。您对subscribeOn的调用将导致主线程返回,而另一个线程执行您的可观察链。当主线程到达程序末尾时,它将终止(可能在从check()发出任何数据之前)。您可以添加.toBlocking()以访问将等待终端事件的块运算符。

int i = Observable.just(1)
    .subscribeOn(Schedulers.io())
    .toBlocking()
    .single();

如果这不是问题(即您正在使用倒计时锁存器或在某种类型的服务器中运行),那么我建议检查从check()返回的可迭代或未来是否为空。