我正在尝试使用以下方法观察主线程上的observable:
// Kotlin Code
Observable
.observeOn(AndroidSchedulers.mainThread())
但我收到了以下错误:
Type Mismatch:
Required: rx.Scheduler!
Found: io.reactivex.Scheduler!
我订阅的Observable来自一个用Java编写的库,因此使用RxJava。
我是愚蠢而失踪的东西?我很困惑:$
提前致谢:)
答案 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个选项可以解决此问题:
Observable
转换为RxJava 2.(RxJavaInterop.toV2Observable(Observable);
)答案 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())