在 RxJava 中组合 2 个数据源,可以从 1 个可观察量中获取新数据

问题描述 投票:0回答:1

我目前正在开发一个 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
    }

}
java android kotlin rx-java rx-java2
1个回答
0
投票

我通过更改订阅

Observable
(从 API 获取数据)的方式成功解决了我的问题。现在我创建了一个新的订阅者,手动将数据发送到
BehaviorSubject
。我对解决方案不满意,但我没有想到更好的解决方案:

private fun fetchLatestData() {
    remoteDataSource.fetchLatestData()
        .subscribeOn(Schedulers.io())
        .subscribe({
            remoteDataObservable.onNext(it)
        }, {})
}
© www.soinside.com 2019 - 2024. All rights reserved.