不能用RxKotlin'observeOn'主线程

时间:2017-04-22 21:06:34

标签: android kotlin rx-java2 rx-kotlin kotlin-interop

我正在尝试使用以下方法观察主线程上的observable:

    // Kotlin Code
    Observable
      .observeOn(AndroidSchedulers.mainThread())

但我收到了以下错误:

    Type Mismatch:
      Required: rx.Scheduler!
      Found: io.reactivex.Scheduler!

我订阅的Observable来自一个用Java编写的库,因此使用RxJava。

我是愚蠢而失踪的东西?我很困惑:$

提前致谢:)

5 个答案:

答案 0 :(得分:4)

  Required: rx.Scheduler!

Required表示签名为Observable.observeOn(rx.Scheduler)

  Found: io.reactivex.Scheduler!

Found表示签名为io.reactivex.Scheduler AndroidSchedulers.mainThread()

这意味着Observable是一个RxJava 1可观察对象,而使用的RxAndroid版本是为RxJava 2构建的。由于您提到observable是由库提供的,这意味着库是使用RxJava 1构建的。

您有3个选项可以解决此问题:

  1. 弄清楚相关库是否有RxJava 2版本,或者自己将这些更新贡献给项目。
  2. 使用akarnokd/RxJava2Interop将旧Observable转换为RxJava 2.(RxJavaInterop.toV2Observable(Observable);
  3. 将其他依赖项切换回RxJava 1。

答案 1 :(得分:1)

请在您的gradle导入中包含此内容

rxandroid_version = “2.0.1”

实施“io.reactivex.rxjava2:rxandroid:$ rxandroid_version”

将此添加到您的项目

import io.reactivex.android.schedulers.AndroidSchedulers

答案 2 :(得分:0)

如果您使用的是KOTLIN,那么最好使用RX Kotlin! Ť 只需在build.gradle中添加两行:

//rxkotlin
    implementation "io.reactivex.rxjava2:rxkotlin:2.4.0"
    implementation "io.reactivex.rxjava2:rxandroid:2.0.2"

答案 3 :(得分:0)

1.add:

this

2。编写此代码:

   //RX JAVA
    implementation "io.reactivex.rxjava3:rxjava:3.0.0-RC6"

    implementation "io.reactivex.rxjava2:rxandroid:2.0.2"

3。添加这些导入:

  val taskObservable: Observable<Task> = Observable.fromIterable(DataSource.createTaskList())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())

    }

答案 4 :(得分:0)

使用

.subscribeOn(io.reactivex.rxjava3.schedulers.Schedulers.io())