7

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

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

但我收到以下错误:

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

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

我是不是很愚蠢,错过了什么?我很困惑:$

提前致谢 :)

4

4 回答 4

8
  Required: rx.Scheduler!

Required意味着签名是Observable.observeOn(rx.Scheduler)

  Found: io.reactivex.Scheduler!

Found意味着签名是io.reactivex.Scheduler AndroidSchedulers.mainThread()

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

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

  1. 确定有问题的库是否有 RxJava 2 版本,或者自己将这些更新贡献给项目。
  2. 使用akarnokd/RxJava2Interop将旧版本转换Observable为 RxJava 2。( RxJavaInterop.toV2Observable(Observable);)
  3. 将其他依赖项切换回 RxJava 1。
于 2017-04-22T23:36:48.920 回答
7

1.添加:

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

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

2.编写此代码:

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

    }

3.添加这些进口:

import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.functions.Function
import io.reactivex.schedulers.Schedulers

笔记 :

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

//rxkotlin
    implementation "io.reactivex.rxjava2:rxkotlin:2.4.0"
    implementation "io.reactivex.rxjava2:rxandroid:2.0.2"
于 2019-12-19T15:57:05.570 回答
5

请将此包含在您的 gradle 导入中

rxandroid_version="2.0.1"

implementation "io.reactivex.rxjava2:rxandroid:$rxandroid_version"

将此添加到您的项目中

import io.reactivex.android.schedulers.AndroidSchedulers
于 2017-11-30T07:50:23.857 回答
0

利用

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

于 2021-02-18T22:05:49.120 回答