gpt4 book ai didi

java - 通过 PublishSubject 在 onNext 中传递 null 并在 RxJava 中过滤该响应

转载 作者:行者123 更新时间:2023-12-02 11:05:53 26 4
gpt4 key购买 nike

我有这样的代码:

  getLocationObservable() //this observable returns via PublishSubject the location
.filter(location -> {
.....
Here I want to be able to get a null value for the location
})
.flatMap(location -> anotherObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( new Observer<........

在Location类中是这样的:

 private PublishSubject<Location> locationPublishSubject = PublishSubject.create();

public Observable<Location> getLocationObservable() {
return locationPublishSubject;
}

and then...
locationPublishSubject.onNext( foundLocation);

现在,getLocationObservable 基于 PublishSubject,它通过 onNext 返回位置。然后我在 filter 运算符内对其进行分析。然而,有时找不到Location,它会传递null。但是在 onNext 中传递 null 会导致崩溃。更具体地说,我得到: UndeliverableException: java.lang.Throwable怎么解决?

最佳答案

Rx 不适用于 null 最终抛出异常。您可以在此处使用 Wrapper 模式。

Kotlin 示例

class Wrapper<T>(val value: T?)

修改您的主题以发出包装在包装类中的位置。在过滤选项中检查是否包含null,例如

.filter{ it.value != null }

Java 示例

添加类包装器

public class Wrapper<T> {
public final T value;

public Wrapper(T value) {
this.value = value;
}
}

然后在发出新位置并过滤它时使用它。

public Observable<Location> getLocationObservable() {
return locationPublishSubject;
}
and then...
locationPublishSubject.onNext(new Wrapper(foundLocation));

.filter(wrapper -> {
wrapper.value != null;
})

或者,如果可能的话,您可以跳过发射位置(如果它为 null)。

关于java - 通过 PublishSubject 在 onNext 中传递 null 并在 RxJava 中过滤该响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50962961/

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