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 的值就可以了。我做错了什么?

  1. LiveDataReactiveStreams.fromPublisherPublisher 作为参数。您必须将 Observable 转换为 Publisher。例如:
val obs2 = obs.toFlowable(BackpressureStrategy.BUFFER)
  1. 正确的语法是:
liveData1 = LiveDataReactiveStreams.fromPublisher(obs)