Как вызвать onError после filter()
Мой observable генерирует случайное число от 1 до 5. Я фильтрую числа, чтобы они не были равны 4. Какие есть способы вызвать метод onError внутри активити, если значение будет равно 4? Проверять значение и выбрасывать исключение в doOnNext не подойдет.
Мой observable:
var observable: Observable<Int> = Observable.create {
it.onNext(((1..5).random()))
}
Мой метод, возвращающий этот observable:
fun getBackgroundColorObservable(): Observable<Color> =
observable
.delay(2, TimeUnit.SECONDS)
.filter { x -> x != 4 }
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.map { code -> generateColor(code) }
.observeOn(AndroidSchedulers.mainThread())
Внутри активити подписываюсь на observable:
viewModel.getBackgroundColorObservable().subscribe(
{ next ->
view.setBackgroundColor(next.code)
textView.text = next.name
progressBar.visibility = View.INVISIBLE
},
{ Log.d("Error", "q") },
{ Log.d("Completed", "q") })
Ответы (2 шт):
Автор решения: Circassian
→ Ссылка
Может быть так?
observable
.delay(2, TimeUnit.SECONDS)
.flatMap { x ->
if (x != 4) {
Observable.just(x)
} else {
Observable.error<Int>(Throwable("Error"))
}
}
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.map { code -> Color.valueOf(code) }
.observeOn(AndroidSchedulers.mainThread())
Автор решения: ianbelow
→ Ссылка
observable
.delay(2, TimeUnit.SECONDS)
.filter { x -> x != 4 }
.switchIfEmpty(Observable.error(Throwable()))
Таким образом, если фильтр срабатывает, дальше по цепочке получаем пустой observable и меняем его на ошибку