【问题标题】:How to return error from Rxjava Flowable when using LiveDataReactiveStreams?使用 LiveDataReactiveStreams 时如何从 Rxjava Flowable 返回错误?
【发布时间】:2019-12-04 12:07:37
【问题描述】:

我正在尝试从 Rxjava 流返回错误,但它在返回类型中显示错误。

这里是代码。


    private fun getCategories(): Flowable<Resource<List<Category>>> {
        return shopRepo.getCategories()
            .subscribeOn(Schedulers.io())
            .onErrorReturn { Resource.error(it.message) }
            .doOnSubscribe { Resource.loading(true) }
            .map{
                Resource.success(it)
            }
    }

    fun observeCategories(): LiveData<Resource<List<Category>>> {
        return LiveDataReactiveStreams.fromPublisher(getCategories())
    }

}

这是我的资源类

data class Resource<out T>(val status: Status, val data: T?, val message: String?) {
    enum class Status {
        SUCCESS,
        ERROR,
        LOADING
    }
    companion object {
        fun <T> success(data: T?): Resource<T> {
            return Resource(SUCCESS, data, null)
        }

        fun <T> error(msg: String, data: T?): Resource<T> {
            return Resource(ERROR, data, msg)
        }

        fun <T> loading(data: T?): Resource<T> {
            return Resource(LOADING, data, null)
        }
    }
}

我找不到有关此问题的任何参考资料。

【问题讨论】:

  • 抛出异常?
  • onErrorReturn 期望返回类型与shopRepo.getCategories() 相同。如果你在map 之后移动 onErrorReturn 的链调用,它应该可以工作。

标签: android rx-java2 android-livedata


【解决方案1】:

onErrorReturn 期望返回类型与shopRepo.getCategories() 相同。

如果您将 onErrorReturn 的链调用移到 map 之后,它将起作用,因为地图将转换类型。

shopRepo.getCategories()
        .subscribeOn(Schedulers.io())
        .map{ Resource.success(it) }
        .observeOn(AndroidSchedulers.mainThread()) // You'll need this probably to move it the UI thread.
        .onErrorReturn { Resource.error(it.message) }
        .doOnSubscribe { Resource.loading(true) }

【讨论】:

  • Resource.loading 不工作。在片段中,我正在检查加载状态,但它不起作用。
  • 很难说为什么它不能从这段代码中工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多