【问题标题】:LiveData to Observable conversion to use RxJavaLiveData 到 Observable 的转换以使用 RxJava
【发布时间】:2018-04-23 05:57:28
【问题描述】:

通过使用LiveDataReactiveStreams,可以将LiveData 转换为Publisher。 但是为了使用 RxJava2 方法,例如withLatestFrom,我需要一个Observable 而不是Publisher。除了使用这个(过时的)库 - RxJava<->ReactiveStreams 之外,还有其他方法可以将 Publisher 转换为 Observable 吗?

【问题讨论】:

  • RxJava 2 Flowable 是一个 Publisher 并且可以与 Publishers 一起使用。您可能不必转换为 Observable

标签: android observable rx-java2 android-livedata


【解决方案1】:
// Flowable to LiveData

val flowable = Flowable.just(1, 2, 3)
val liveData = LiveDataReactiveStreams.fromPublisher<Int>(flowable)

// From Live Data to Publisher(Flowable is also publisher)

LiveDataReactiveStreams.toPublisher(this, liveData).subscribe(object: Subscriber<Int>{
    override fun onNext(t: Int?) {}

    override fun onComplete() {}

    override fun onSubscribe(s: Subscription?) {}

    override fun onError(t: Throwable?) {}
})

【讨论】:

    【解决方案2】:

    所以我设法做了这样的事情。但是我不知道把这段代码放在android项目结构的哪里,因为toPublisher需要Activity实例。

    val rxDataPublisher: Publisher<DataSnapshot> = LiveDataReactiveStreams.toPublisher(this@LocationActivity,fireBaseLiveData)
    
    val rxLocationPublisher: Publisher<Location> = LiveDataReactiveStreams.toPublisher(this@LocationActivity, locationLiveData)
    
    val rxFlowable: Flowable<Pair<Location, DataSnapshot>> = Flowable.fromPublisher(rxDataPublisher)
                    .withLatestFrom(rxLocationPublisher, BiFunction{t1, t2 -> Pair(t2,t1) })
    
    val flowableToLiveData = LiveDataReactiveStreams.fromPublisher(rxFlowable)
    

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多