gpt4 book ai didi

android - Rx Subject 不能使用 observeOn() 运算符

转载 作者:行者123 更新时间:2023-11-29 18:43:10 24 4
gpt4 key购买 nike

我已经声明:

Subject<String> mBehaviorSubject = BehaviorSubject.createDefault("default").toSerialized();

似乎工作正常。但我现在想添加 .observeOn(AndroidSchedulers.mainThread()。这被拒绝了,因为 Android Studio 想要看到一个 Subject 并且正在寻找一个 Observable。但是根据文档,Subject 继承了 Observable 类的 observeOn() 方法。我该如何实现它?

附言假设我可以做到这一点,是否有运算符 observeOn()toSerialized() 的优先顺序?

更新:这是我尝试使用的实际完整代码:

Subject<String> stringPublisher; 
...
stringPublisher = BehaviorSubject.createDefault("default").toSerialized().observeOn(AndroidSchedulers.mainThread());

Android Studio 说“不兼容的类型:需要:io.reactivex.subjects.Subject;找到:io.reactivex.Observable”

最佳答案

This is rejected because Android Studio wants to see a Subject and is finding an Observable. But according to the documentation, Subject inherits the observeOn() method from the Observable class.

你是对的 Subject继承了这个方法,但这并没有改变 observeOn 的返回类型方法;它仍然返回 Observable<T> .因为您正在尝试进行分配,所以这会中断。

让我们回顾一下每个电话...

Subject<String> subject = BehaviorSubject.createDefault("default");

这很好; createDefault()返回 BehaviorSubject<T> ,它是 Subject<T> 的子类,因此将其值分配给我们的 subject 没有问题变量。

Subject<String> subject = BehaviorSubject.createDefault("default").toSerialized();

这也可以; toSerialized()返回 Subject<T> ,所以我们的任务仍然有效。但是请注意,这仍然比 BehaviorSubject<T>“更不具体” ,所以如果我们的变量声明改为 BehaviorSubject<String> subject ,这已经中断了。

Subject<String> subject = BehaviorSubject.createDefault("default")
.toSerialized()
.observeOn(AndroidSchedulers.mainThread());

我们终于要休息了。 observeOn()返回 Observable<T> ,而一个 Subject “是一个”Observable ,我们仍然不能再进行赋值,因为我们有一个错误类型的对象。这类似于尝试分配 ObjectString变量。

因此,您要么必须将声明更改为 Observable<String> subject (以便您可以执行赋值),或者您必须将代码分解为赋值和语句:

Subject<String> subject = BehaviorSubject.createDefault("default").toSerialized();
Observable<String> observable = subject.observeOn(AndroidSchedulers.mainThread());

关于android - Rx Subject 不能使用 observeOn() 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52593298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com