所以我要做的是从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
我在这里做什么错了?