Android - Как обработать ошибку с помощью LiveData и RxJava? - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в изучении компонентов архитектуры Android , и я застрял в вопросе несколько дней.

Я использую LiveDataReactiveStreams для преобразования Livedata и Flowable, всеиз них работает хорошо, за исключением обработки onError RxJava.

        livedata = LiveDataReactiveStreams.fromPublisher(
            // bookRepository.getAll() return a Flowable
            bookRepository.getAll().map {
                val allBookNames = mutableListOf<String>()
                it.forEach {
                    allBookNames.add(it.name)
                }
                return@map allBookNames.toList()
            }
        )

Я видел Как обрабатывать состояния ошибок с LiveData? и выяснить, могу ли я

  1. обернуть мои данные, чтобы обработать мою ошибку

  2. или использовать MediatorLiveData как @ Никола Деспотоски сказал, но есть еще один вопрос, Flowable onComplete () никогда не вызывается.

Есть ли лучший способ решить этот вопрос или какие-либо подробности об этих двух решениях яигнорируются?

1 Ответ

0 голосов
/ 27 сентября 2018
LiveDataReactiveStreams.fromPublisher(
            Observable.just(1,2)
                    .map { LiveDataResult(it, null) }
                    .onErrorReturn {
                        it.printStackTrace()
                        LiveDataResult(null, it)
                    }
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .toFlowable(BackpressureStrategy.MISSING)


class LiveDataResult<T>(val data: T?, val error: Throwable?)

Тогда в inII вы можете обработать результат или ошибку

...