我正在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
}
答案 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)
}