我打算使用RxJava和pi4j来识别Button事件。
我需要检测:
我是Observable和RxJava的新手,我只能编写一个简单的测试来检测2次点击:
Observable<Boolean> source = Observable.create(emitter -> {
emitter.onNext(true);
emitter.onNext(false);
emitter.onNext(true);
emitter.onNext(false);
Thread.sleep(300);
emitter.onNext(false);
Thread.sleep(300);
emitter.onNext(false);
Thread.sleep(2000);
emitter.onNext(true);
emitter.onNext(false);
Thread.sleep(550);
emitter.onNext(false);
Thread.sleep(2000);
emitter.onNext(false);
emitter.onNext(false);
emitter.onComplete();
});
source
.filter((value) -> value == false)
.timeout(500, TimeUnit.MILLISECONDS)
.onErrorReturn((error) -> { return true; })
.filter((value) -> value == false)
.buffer(2)
.filter((items) -> items.size() == 2)
.subscribe(
(list) -> { System.out.println("double tap? " + list); },
(error) -> { System.out.println("error " + error); },
() -> { System.out.println("complete"); }
);
现在的问题是,当超时超过500毫秒时,抛出一个异常,导致观察者完成,但是我的目标是永不停止监听来自该来源的事件!
有人可以帮助我吗? 那单击和长按事件又如何呢? 我怎么认出来?
谢谢。