调用对象变为非null一次

时间:2016-05-31 18:24:38

标签: java android rx-java rx-android

我需要做一件简单的事情:当我的字段,前一个状态为null,变为非null时,执行一些事情。如果事先不是null,则提交也应该执行一次。为此我创建了这段代码:

Observable.just(object).filter(new Func1<Object, Boolean>() {
            @Override
            public Boolean call(Object o) {
                return o != null;
            }
        }).subscribe(new Action1<Object>() {
            @Override
            public void call(Object o) {
                Toast.makeText(MainActivity.this, "Object is non-null", Toast.LENGTH_SHORT).show();
            }
        });

虽然不起作用。我该怎么办?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可能希望使用BehaviorSubject来存储值,并使用空检查应用distinctUntilChanged来对更改做出反应:

BehaviorSubject<Object> bs = BehaviorSubject.create();

bs.distinctUntilChanged(v -> v != null)
.doOnNext(v -> System.out.println(v))
.subscribe();

bs.onNext(1);
bs.onNext(2);
bs.onNext(null);
bs.onNext(null);
bs.onNext(3);