subscription()中的代码未执行

时间:2019-04-30 16:10:58

标签: android retrofit2 rx-java2

所以我要做的是从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

我在这里做什么错了?

0 个答案:

没有答案