LiveDataReactiveStreams.fromPublisher 不工作
LiveDataReactiveStreams.fromPublisher is not working
我正在尝试使用 LiveDataReactiveStreams.fromPublisher
从 RxJava2 Observable
创建一个 LiveData
对象。但是,在创建 LiveData 对象时(从我的 ViewModel),它在被观察时从不触发(从我的 Fragment)。
这是一个基本示例。为了进行比较,我已经包含了将此数据从 Observable 获取到 LiveData 的替代方法(通过订阅 Observable)。
class MainFragmentViewModel : ViewModel() {
val liveData1: LiveData<List<Int>>
val liveData2: MutableLiveData<List<Int>> = MutableLiveData()
private val disposeBag = CompositeDisposable()
init {
val obs: Observable<List<Int>> = Observable.just(listOf(1, 2, 3))
liveData1 = LiveDataReactiveStreams.fromPublisher { obs }
obs.subscribe { liveData2.value = it }.addTo(disposeBag)
}
}
class MainFragment : Fragment() {
private val vm: MainFragmentViewModel by viewModel()
override fun onStart() {
super.onStart()
vm.liveData1.observe(viewLifecycleOwner, Observer {
Timber.d("The liveData1 list has count ${it.count()}")
})
vm.liveData2.observe(viewLifecycleOwner, Observer {
Timber.d("The liveData2 list has count ${it.count()}")
})
}
}
Logcat 现在只包含这个:
D/MainFragment$onStart: The liveData2 list has count 3
换句话说,使用 LiveDataReactiveStreams.fromPublisher
不会做任何事情,而直接订阅 Observable 并更新 LiveData
的值就可以了。我做错了什么?
LiveDataReactiveStreams.fromPublisher
将 Publisher
作为参数。您必须将 Observable
转换为 Publisher
。例如:
val obs2 = obs.toFlowable(BackpressureStrategy.BUFFER)
- 正确的语法是:
liveData1 = LiveDataReactiveStreams.fromPublisher(obs)
我正在尝试使用 LiveDataReactiveStreams.fromPublisher
从 RxJava2 Observable
创建一个 LiveData
对象。但是,在创建 LiveData 对象时(从我的 ViewModel),它在被观察时从不触发(从我的 Fragment)。
这是一个基本示例。为了进行比较,我已经包含了将此数据从 Observable 获取到 LiveData 的替代方法(通过订阅 Observable)。
class MainFragmentViewModel : ViewModel() {
val liveData1: LiveData<List<Int>>
val liveData2: MutableLiveData<List<Int>> = MutableLiveData()
private val disposeBag = CompositeDisposable()
init {
val obs: Observable<List<Int>> = Observable.just(listOf(1, 2, 3))
liveData1 = LiveDataReactiveStreams.fromPublisher { obs }
obs.subscribe { liveData2.value = it }.addTo(disposeBag)
}
}
class MainFragment : Fragment() {
private val vm: MainFragmentViewModel by viewModel()
override fun onStart() {
super.onStart()
vm.liveData1.observe(viewLifecycleOwner, Observer {
Timber.d("The liveData1 list has count ${it.count()}")
})
vm.liveData2.observe(viewLifecycleOwner, Observer {
Timber.d("The liveData2 list has count ${it.count()}")
})
}
}
Logcat 现在只包含这个:
D/MainFragment$onStart: The liveData2 list has count 3
换句话说,使用 LiveDataReactiveStreams.fromPublisher
不会做任何事情,而直接订阅 Observable 并更新 LiveData
的值就可以了。我做错了什么?
LiveDataReactiveStreams.fromPublisher
将Publisher
作为参数。您必须将Observable
转换为Publisher
。例如:
val obs2 = obs.toFlowable(BackpressureStrategy.BUFFER)
- 正确的语法是:
liveData1 = LiveDataReactiveStreams.fromPublisher(obs)