Итак, я хочу получить данные из API и в зависимости от результата изменить статус, чтобы наблюдатель статуса получил уведомление и мог действовать соответственно.
fun getQuestionsByRelatedCategoriesFromApi(categoryId: Int, language: String){
faqFetchStatus.onNext(NetworkStatus.STARTED)
faqService.getQuestionsOfCategory(categoryId, language)
.subscribeOn(Schedulers.io())
.subscribe(
{
Log.d("FaqRepository", "Fetching ${it.size} questions from API")
//adding the language to the question for DB calls
for (element in it) {
element.language = language
}
insertQuestionsInDb(it)
faqFetchStatus.onNext(NetworkStatus.FINISHED)
},
{
faqFetchStatus.onNext(NetworkStatus.FAILED)
}
)
}
View
вызывает ViewModel
, который в свою очередь вызывает вышеуказанную функцию в Repository
. Как и ожидалось, статус меняется на «НАЧАЛО» и отображается круг загрузки. Однако код подписки никогда не вызывается, что приводит к бесконечному циклу загрузки (с точки зрения пользователей).
Если я удаляю subscribeOn(Schedulers.io())
, код в subscribe()
выполняется, но, поскольку теперь это вызов основного потока, я получаю следующую ошибку.
android.os.NetworkOnMainThreadException
Что я здесь не так делаю?