android - 如何使用LiveData和RxJava处理错误?

时间:2018-05-30 03:28:27

标签: android kotlin rx-java android-livedata

我是学习android architecture components的新手,几天来我一直坚持这个问题。

我使用LiveDataReactiveStreams转换Livedata和Flowable,除了处理RxJava的onError外,所有这些都运行良好。

        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()
            }
        )

我看到了How to handle error states with LiveData? ,并且发现我可以

  1. 将我的数据包装成处理我的错误

  2. 或使用MediatorLiveData作为@ Nikola Despotoski表示,但还有一个问题是Flowable onComplete()永远不会被调用。

  3. 有没有更好的方法来解决这个问题,或者我忽略了这两个解决方案的任何细节?

1 个答案:

答案 0 :(得分:0)

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?)

然后在inUI中您可以处理结果或错误