Код внутри подписки () не выполняется - PullRequest
0 голосов
/ 30 апреля 2019

Итак, я хочу получить данные из 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

Что я здесь не так делаю?

...