用RxKotlin无法'observeOn'主线程

Nat*_*gan 3 android kotlin rx-kotlin kotlin-interop rx-java2

我正在尝试使用以下方法在主线程上观察到可观察到的结果:

    // Kotlin Code
    Observable
      .observeOn(AndroidSchedulers.mainThread())
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

    Type Mismatch:
      Required: rx.Scheduler!
      Found: io.reactivex.Scheduler!
Run Code Online (Sandbox Code Playgroud)

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

我是愚蠢的东西吗?我很困惑:$

提前致谢 :)

Kis*_*kae 6

  Required: rx.Scheduler!
Run Code Online (Sandbox Code Playgroud)

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

  Found: io.reactivex.Scheduler!
Run Code Online (Sandbox Code Playgroud)

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

这意味着,它Observable是RxJava 1可观察的,而所使用的RxAndroid版本是为RxJava 2构建的。由于您提到可观察的是由库提供的,因此这意味着该库是使用RxJava 1构建的。

您有3个解决方案:

  1. 找出所涉及的库是否具有RxJava 2版本,或者自己将这些更新贡献给项目。
  2. 使用akarnokd / RxJava2Interop将旧Observable版本转换为RxJava2。(RxJavaInterop.toV2Observable(Observable);
  3. 将其他依赖项切换回RxJava 1。


san*_*adi 6

1.添加:

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

    implementation "io.reactivex.rxjava2:rxandroid:2.0.2"
Run Code Online (Sandbox Code Playgroud)

2.写下这段代码:

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

    }
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

笔记 :

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

//rxkotlin
    implementation "io.reactivex.rxjava2:rxkotlin:2.4.0"
    implementation "io.reactivex.rxjava2:rxandroid:2.0.2"
Run Code Online (Sandbox Code Playgroud)


TSG*_*ces 5

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

rxandroid_version="2.0.1"

implementation "io.reactivex.rxjava2:rxandroid:$rxandroid_version"
Run Code Online (Sandbox Code Playgroud)

将此添加到您的项目中

import io.reactivex.android.schedulers.AndroidSchedulers
Run Code Online (Sandbox Code Playgroud)