Search code examples
androidkotlinrx-java2rx-kotlin

Rx how to return Throwable or Object based on error type


I have a method that returns an Observable. I have this case where, in case of error I need to check error type, and for some specific error I need to return MyObject instead of error.

Example:

    override fun getSomething(param: String): Observable<State> {
        return someInterface.getSingleResult(param)
            .flatMapObservable {
                when(something) {
                    true -> {
                        Observable.just(State.ACTIVE)
                    }
                    false -> {
                        Observable.just(State.PAUSED)
                    }
                }
            }
            .onErrorReturn {
                 if(it is Something) {
                      State.INACTIVE
                 } else {
//                    returns Throwable  <- don;t know how to handle this
                 } 
            } 
    }

Solution

  • I'm not sure I got it right, but would the following work for you?

    .onErrorResumeNext {
        if (it is Something) {
            Observable.just(State.INACTIVE)
        } else {
            Observable.error(it)
        }
    }
    
    fun testObservable(): Observable<Int> {
        return Observable.just(1, 2, 3)
                .onErrorResumeNext { error: Throwable ->
                    if (error is IllegalArgumentException) {
                        Observable.just(0)
                    } else {
                        Observable.error(error)
                    }
                }
    }