RxJava использует одиночные данные и возвращает Completable - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю с RxJava в Android, я пытаюсь создать функцию, которая будет вызывать API, используя Retrofit, суть в том, что я хочу обработать данные API в ViewModel и передать в View a Completable, чтобы уведомить, был ли запрос успешным или нет.

Я думал об использовании Subject и затем в вызове функции подписки для Subject onComplete или onError, но я не уверен, является ли это хорошей практикой.

Я хочу что-то вроде этого

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 голосов
/ 04 апреля 2019

Вы можете запустить вызов API в onCreate обратном вызове вашего экрана. Затем подпишитесь на изменения LiveData в onViewCreated callback

вызов 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)
}
0 голосов
/ 03 апреля 2019

ViewModel может предоставить LiveData, на который может подписаться View. Всякий раз, когда Single выдает значение, вы можете вызвать postValue метод LiveData, и View может получить результат завершения вызова API.

...