无法从 RxJava2 准确迁移到 RxJava3

Posted

技术标签:

【中文标题】无法从 RxJava2 准确迁移到 RxJava3【英文标题】:Can't migrate accurately from RxJava2 to RxJava3 【发布时间】:2020-09-27 04:35:40 【问题描述】:

尽管升级了依赖项,但我无法将此方法转换为 RxJava3

fun setSearchField(searchField: EditText) 
        searchDisposable = searchField.afterTextChangeEvents()
            .skipInitialValue()
            .debounce(400, TimeUnit.MILLISECONDS)
            .map  it.editable()?.toString() ?: "" 
            .distinctUntilChanged()
            .observeOn(androidSchedulers.mainThread())
            .subscribe(::onSearchQueryUpdated)
    

类型不匹配。 必需的: io.reactivex.rxjava3.disposables.Disposable? 成立: io.reactivex.disposables.Disposable!

    def retrofit_version = '2.9.0'
    implementation "io.reactivex.rxjava3:rxjava:3.0.4"
    implementation "io.reactivex.rxjava3:rxkotlin:3.0.0"
    implementation "io.reactivex.rxjava3:rxandroid:3.0.0"
    implementation "com.jakewharton.rxbinding3:rxbinding:3.1.0"
    implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
    implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
    implementation "com.github.akarnokd:rxjava3-retrofit-adapter:3.0.0"
    implementation "com.squareup.okhttp3:logging-interceptor:4.7.2"

我应该如何准确地从 RxJava2 中清理项目?

我尝试过使缓存无效/重新启动:什么也没发生。

【问题讨论】:

检查依赖图,可能有一个库或模块仍然具有 rx2 作为传递依赖。您可以在终端中使用./gradlew :app:dependencies 打印此图,或在 IDE(项目结构)中显示它们。 不,命令失败,IDE 没有显示任何内容。 【参考方案1】:

依赖:./gradlew :dependencies

implementationDependenciesMetadata
+--- io.reactivex.rxjava3:rxjava:3.0.4
|    \--- org.reactivestreams:reactive-streams:1.0.3
+--- io.reactivex.rxjava3:rxkotlin:3.0.0
|    \--- io.reactivex.rxjava3:rxjava:3.0.0 -> 3.0.4 (*)
+--- io.reactivex.rxjava3:rxandroid:3.0.0
|    \--- io.reactivex.rxjava3:rxjava:3.0.0 -> 3.0.4 (*)
+--- com.jakewharton.rxbinding3:rxbinding:3.1.0
|    +--- androidx.annotation:annotation:1.0.0 FAILED
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.41 -> 1.3.71
|    |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.71
|    |    \--- org.jetbrains:annotations:13.0
|    +--- io.reactivex.rxjava2:rxjava:2.2.10
|    |    \--- org.reactivestreams:reactive-streams:1.0.2 -> 1.0.3
|    \--- io.reactivex.rxjava2:rxandroid:2.1.1
|         \--- io.reactivex.rxjava2:rxjava:2.2.6 -> 2.2.10 (*)

你看,rxbinding3 对

有传递依赖
|    +--- io.reactivex.rxjava2:rxjava:2.2.10

覆盖 RxJava3

解决方案:

implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0'

【讨论】:

以上是关于无法从 RxJava2 准确迁移到 RxJava3的主要内容,如果未能解决你的问题,请参考以下文章

Android Annotation注解RxJava开源网络库

揭秘!如何用Flutter设计一个100%准确的埋点框架?

揭秘!一个高准确率的Flutter埋点框架如何设计

高级RxJava2响应式编程思想,如何开发电商网站,Redis从入门到高

使用 Keras 进行迁移学习,验证准确度从一开始就没有提高(超出原始基线),而训练准确度提高了

RxJava 3 映射器