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。
我是愚蠢的东西吗?我很困惑:$
提前致谢 :)
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个解决方案:
Observable版本转换为RxJava2。(RxJavaInterop.toV2Observable(Observable);)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)
请将此包含在您的 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)
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |