我在Android应用程序中使用Room
和RxJava2
。我有一种情况,我希望同一函数在某个时刻运行synchronously
而在其他地方运行asynchronously
。下面是函数:
@Query("SELECT * from saved_survey WHERE enumeratorId = :enumeratorId and isDeleted=:isDeleted ORDER BY savedSurveyTime DESC")
fun getSavedSurveyList(enumeratorId: String, isDeleted: Boolean): Flowable<List<SavedSurvey>>
我想从IntentService
调用时同步运行此函数,而从UI线程调用时异步运行。我将此函数称为:
savedSurveyViewModel.getSavedSurveyList(enumeratorId, false)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe()
我不想在repository
或viewmodel
中使用多个功能。任何有效的方法将不胜感激。
谢谢
答案 0 :(得分:0)
我找到了解决方案。相同的功能可用于同步和异步。 RxJava2
提供了这两种行为。
异步
savedSurveyViewModel.getSavedSurveyList(enumeratorId, false)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe()
同步
savedSurveyViewModel.getSavedSurveyList(enumeratorId, false).blockingSubscribe()
或
savedSurveyViewModel.getSavedSurveyList(enumeratorId, false).blockingSingle()
谢谢。