我目前正在开发一个 Android 应用程序,我在 ViewModel 中使用 RxJava 来处理来自本地 Room 数据库和远程 API (Retrofit) 的数据。我已经实现了拉动刷新功能,并且在
onRefresh
方法中,我当前正在创建一个新的可观察对象以从远程 API 获取数据。
问题是我希望当用户进行拉动刷新时触发组合的可观察量,但它没有被触发。
可能是什么问题?
@HiltViewModel
class MyViewModel @Inject constructor(
private val remoteDataSource: RemoteDataSource,
private val localDataSource: LocalDataSource,
) {
private val remoteDataObservable = BehaviorSubject.createDefault<List<Data>>(emptyList())
init {
disposables += Observable.combineLatest(
localDataSource.getData(),
remoteDataObservable,
{ local, remote ->
local.plus(remote)
}
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
displayList(it)
}
fetchLatestData()
}
fun onPullToRefresh() {
fetchLatestData()
}
private fun fetchLatestData() {
remoteDataSource.fetchLatestData()
.subscribeOn(Schedulers.io())
.subscribe(remoteDataObservable)
}
private fun displayList(list: List<Data>) {
// Display list
}
}
我通过更改订阅
Observable
(从 API 获取数据)的方式成功解决了我的问题。现在我创建了一个新的订阅者,手动将数据发送到BehaviorSubject
。我对解决方案不满意,但我没有想到更好的解决方案:
private fun fetchLatestData() {
remoteDataSource.fetchLatestData()
.subscribeOn(Schedulers.io())
.subscribe({
remoteDataObservable.onNext(it)
}, {})
}