RxAndroid 3主线程

xkrw2x1b  于 2023-03-21  发布在  Android
关注(0)|答案(5)|浏览(168)

我正在尝试在Rx 3中查找subscribeOn的主线程

Single.just(getHeavyData())
                                .subscribeOn(Schedulers.io())
                                .observeOn(AndroidSchedulers.mainThread())
                                .subscribe(new Consumer<Data>() {
                                    @Override
                                    public void accept(Data d) throws Throwable {
                                        setAdapters(d);
                                    }
                                });

AndroidSchedulers.mainThread()-与全新的RX 3不兼容
Gradle导入:implementation "io.reactivex.rxjava3:rxjava:3.0.0-RC3"
我们如何找到主线程以便对UI进行更改?

h5qlskok

h5qlskok1#

mainThread()不是Rx Java 1、2或3的一部分。它是RxAndroid库的一部分。将RxAndroid依赖项添加到您的项目中,您将获得此方法。
RxAndroid仍然使用RxJava 2。在库的创建者更新之前,这个问题仍然存在。
新的软件包结构已经在3.0.0-RC 2中发布,并且有一个支持库,这样v2和v3就可以互相通信,而不会有以前隐藏或公开的编译/运行时问题。这也意味着模块覆盖技巧不再起作用,所以你必须手动桥接AndroidSchedulers或从Retrofit中使用的v2源代码转换,直到这些(和许多其他)库开始支持v3。
请参考此和this

htrmnn0y

htrmnn0y2#

这是导入的问题。在意识到需要引用RxJava3之前,我也遇到过类似的问题。请将这些导入用于调度器和可处置单观察器

import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
    import io.reactivex.rxjava3.observers.DisposableSingleObserver;
    import io.reactivex.rxjava3.schedulers.Schedulers;

此外,如果服务的方法返回Single use

import io.reactivex.rxjava3.core.Single;
6psbrbz9

6psbrbz93#

有一个类似的问题,兼容性问题是从一个单一的导入。即使我使用的是RxJava3库和RxAndroid3,我仍然使用:

import io.reactivex.Single

但在将单曲指向以下内容时得到解决:

import io.reactivex.rxjava3.core.Single
u4vypkhs

u4vypkhs4#

检查您的导入,您可能正在导入类似以下内容:

implementation 'io.reactivex.**rxjava2**:rxandroid:x.y.z'

但您应该导入类似以下内容:
implementation 'io.reactivex.**rxjava3**:rxandroid:3.0.0'(检查最新版本)
解决了我的问题

8nuwlpux

8nuwlpux5#

添加这些依赖项,您就可以很好地使用了。

dependencies {
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
    // Because RxAndroid releases are few and far between, it is recommended you also
    // explicitly depend on RxJava's latest version for bug fixes and new features.
    // (see https://github.com/ReactiveX/RxJava/releases for latest 3.x.x version)
    implementation 'io.reactivex.rxjava3:rxjava:3.1.5'
}

https://github.com/ReactiveX/RxAndroid#binaries

相关问题