Rx java rxjava行为主体删除/清除值

Rx java rxjava行为主体删除/清除值,rx-java,reactive-programming,Rx Java,Reactive Programming,我有一个应用程序,它使用BehaviorSubject作为一些值的内存存储。如果用户已登录或在用户登录期间,则此值在应用程序启动时根据REST API请求的结果进行设置。 但当用户注销时,BehaviorSubject保留旧值。有没有办法清除行为主体并强制其按需将hasValue()设置为false?简短的回答是否定的 一旦主体收到至少一个值hasValue将始终返回true。在这些情况下,一个常见的技巧是使用包装类。下面是一个带有可选的示例: Subject subject = Behavio

我有一个应用程序,它使用
BehaviorSubject
作为一些值的内存存储。如果用户已登录或在用户登录期间,则此值在应用程序启动时根据REST API请求的结果进行设置。
但当用户注销时,BehaviorSubject保留旧值。有没有办法清除
行为主体
并强制其按需将
hasValue()
设置为false?

简短的回答是否定的

一旦主体收到至少一个值
hasValue
将始终返回true。在这些情况下,一个常见的技巧是使用包装类。下面是一个带有
可选
的示例:

Subject subject = BehaviorSubject.<Optional<String>>create()
// add
subject.accept(Optional.of("Hello"))
// "clear" value
subject.accept(Optional.empty())

// check
subject.value.isPresent()
Subject-Subject=BehaviorSubject.create()
//加
subject.accept(可选,of(“Hello”))
//“清晰”值
subject.accept(可选的.empty())
//检查
subject.value.isPresent()

另一种可能的方法是从1个元素中的列表创建一个
行为主体。一旦要删除它,只需执行以下操作:

val subject: BehaviorSubject<List<YourObject>> = BehaviorSubject.create()
subject.onNext(emptyList())
val subject:BehaviorSubject=BehaviorSubject.create()
subject.onNext(emptyList())

但我会支持这样的观点,即这种混乱是错误的。必须有更优雅的解决方案。

您可以使用
onNext()
设置一个新的“未登录”值,以便新订户可以通过重新启动应用程序进程来解决新的值,只要它更简单。刚刚进来case@Simon不一定。您只需创建自己的可选类