RxJava使用单一数据并返回Completable

时间:2019-04-02 16:59:06

标签: android kotlin rx-java2

我正在Android中使用RxJava,我试图创建一个使用Retrofit调用API的函数,关键是我想在ViewModel中处理API数据并向View发出Completable ,以通知请求是否成功。

我已经考虑过使用Subject,然后进入对subject onComplete或onError的subscribe函数的调用,但是我不确定这是否是一个好习惯。

我想要的是这样的

fun apiCall(paramA:String):Completable{
        webservice.myApiCall(paramA).subscribe { t1, t2 ->
            if (t1  != null){
                handleData(t1)
            }else {
                handleError(t2)
            }
        }
        //The Completable should be returned here
    }

2 个答案:

答案 0 :(得分:0)

ViewModel可能会公开视图可以订阅的LiveData。每当Single发出值时,您可以调用postValue的{​​{1}}方法,并且View可能会获得API调用完成的结果。

答案 1 :(得分:0)

您可以在屏幕的onCreate回调中运行api调用。然后在onViewCreated回调中订阅LiveData更改

Api调用并观察片段:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    model.getNews()
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    model.news.observe(this, Observer {
        (rv_news.adapter as NewsRecyclerAdapter).items = it
    })

}

数据加载逻辑和更新视图:

val news = MutableLiveData<List<News>>()

fun getNews() {
    newsRepository.listOfNews()
        .withScheduler(AndroidSchedulers.mainThread(), Schedulers.io())
        .subscribeBy(
            onSuccess = { news.postValue(it) },
            onError = { it.printStackTrace() }) //Here you can handle error
        .addTo(compositeDisposable)
}