Я занимаюсь разработкой приложения, которое выполняет сетевой запрос с использованием retrofit2 и rxjava2.Я делаю это с использованием подхода MVVM, который в моем RestInterface является результатом запроса, возвращаемого в Flowable, и в моем репозитории я конвертирую Flowable в liveata, чтобы я мог заставить действие наблюдать его в моей модели представления.Но, сделав это, я запутался в том, как справиться, если нет сети, в которой я обычно обрабатываю это на стороне rxJava, но, поскольку он находится в репозитории, я ничего не могу с этим поделать.
Воткод для отдыха:
@GET(NEWS_ARTICLE)
fun getArticlesFromSources(@Query("domains") source: String,
@Query("apiKey") apiKey: String = BuildConfig.NEWS_API_KEY):
Flowable<NewsResponse>
код для репозитория
fun getArticleFromSources(source: String) : LiveData<NewsResponse>{
return LiveDataReactiveStreams.fromPublisher(newsRest.getArticlesFromSources(source)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()))
}
и в моей модели просмотра:
private var mTriggerFetchData = MutableLiveData<String>()
private val article: LiveData<NewsResponse> = Transformations.switchMap(mTriggerFetchData){
newsRepository.getArticleFromSources(it)
}
fun getArticle() = article
fun loadArticle(source: String?){
mTriggerFetchData.value = source
}
, и я наблюдаю его в своей деятельности:
getViewModel().getArticle().observe(this, Observer {newsResponse ->
Log.v("test", newsResponse?.articles?.size.toString())
articleList?.clear()
newsResponse?.articles?.let { articleList?.addAll(it) }
articleAdapter.notifyDataSetChanged()
})
getViewModel().loadArticle(sourceUrl)
Как вы можете видеть, я думал об этом в упражнении, но все же запутался.Любая помощь приветствуется.спасибо!