Как сказано в документации
Дебадирование испускает элемент из Обсерватории только в том случае, если определенный промежуток времени прошел без его испускания другого элемента.Он отфильтровывает элементы, испускаемые исходной наблюдаемой, за которыми быстро следует другой испускаемый элемент.
Поскольку в вашем случае все элементы испускаются в пределах временного окна.Выпускается только последний элемент, а все остальные элементы отфильтровываются.
Полагаю, вы ищете Задержка
Оператор задержки изменяет свою исходную Наблюдаемую, делая паузу для определенного приращения времени (которое вы указываете), прежде чем испускать каждый из элементов исходной Наблюдаемой.Это приводит к сдвигу всей последовательности элементов, излучаемых наблюдаемой вперед, во времени на указанное значение.
Поэтому вместо этого он должен выглядеть примерно так:
getIntegerObservable()
.delay(1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(...);
Вам также следует рассмотреть возможность вызова delay(..)
перед subscribeOn(..)
, чтобы избежать блокировки основного потока
Оформить заказ на эту статью , объясняющую разницу между subscribeOn
и observeOn
ОБНОВЛЕНИЕ
Вы можете обернуть CountDownTimer в Obserable.Например:
Observable.create(emitter -> new CountDownTimer(7000, 1000) {
public void onTick(long millisUntilFinished) {
emitter.onNext(millisUntilFinished / 1000);
}
public void onFinish() {
emitter.onComplete();
}
}.start())
.doOnNext() //you can log your timer here
.subscribe(); //or here
БОНУС (просто для удовольствия: D)
RxJava выглядит намного круче с java8
Observable.create(this::startCountDownTimer)
.doOnNext() //use long value
.map(String::valueOf) //map to string
.doOnNext() //use string value
.doOnComplete() //gets called when the timer is up
.subscribe(this::handleTick, this::handleError);
Метод обратного отсчета
private void startCountDownTimer(ObservableEmitter<Long> emitter) {
new CountDownTimer(7000, 1000) {
public void onTick(long millisUntilFinished) {
emitter.onNext(millisUntilFinished / 1000);
}
public void onFinish() {
emitter.onComplete();
}
}.start();
}
Метод тикания ручки
private void handleTick(String timer) {
//Update UI
}
Метод ошибки ручки
private void handleError(Throwable t) {
//Log and inform user
}