Как обрабатывать ошибки в цепочке rxjava в Android? - PullRequest
1 голос
/ 19 июня 2019

У меня есть список элементов, например, список целых чисел, если любое из целых чисел равно нулю, мне нужно использовать ошибку и перейти к следующему элементу

Например

Observable.fromIterable(listOf(1, 2, 3, null, 5))
                .map {
                    doSomeProcess(it)
                }
                .onErrorReturnItem(-1)
                .subscribeBy(
                        onNext = {
                           print(it)
                        },
                        onError = {

                        },
                        onComplete = {

                        })

Я ожидаю вывод, подобный этому

1
2
3
-1
5

Но моя проблема в том, что после -1 он не получает продолжения с пунктом 5, он останавливается на этом, Кто-нибудь может мне помочь с этим?

1 Ответ

1 голос
/ 19 июня 2019

В Rx onError - это событие завершения. Поэтому, если вы не хотите прерывать поток, а просто обрабатываете ошибки и продолжаете получать другие данные, вы можете использовать Уведомление .

 Observable.fromIterable(listOf(1, 2, 3, null, 5))
            .map {
                doSomeProcess(it)
            }
            .subscribeBy(
                onNext = {
                    when {
                        it.isOnNext -> {
                            val result = it.value
                            if(result == -1){
                                //handle error here
                            }
                        }
                        //it.isOnComplete -> {
                        //}
                        //it.isOnError -> {
                        //}
                    }
                }
            )


 private fun doSomeProcess(i: Int?): Notification<Int> =
    if (i == null)
        //Notification.createOnError(IllegalArgumentException())
        Notification.createOnNext(-1)
    else
        Notification.createOnNext(i)
...