gpt4 book ai didi

java - RxJava - 观察可能总是变化的数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:23 28 4
gpt4 key购买 nike

我正试图 catch 响应式潮流,但在阅读并浏览了大量示例之后,我仍然没有找到我要找的东西。

我有一个模型对象,它可能会在应用程序生命周期的任何时候发生变化。
更改可能来自更新它的特定请求(来自服务器、数据库等),或者它可能由于应用程序中触发的事件而更新。

我的问题是如何创建此类对象的 Observable 以及如何在发生变化时不断更新订阅者?

根据我目前所见,我可以像这样创建可观察对象:

Observable.create(new Observable.OnSubscribe<MyModel>() {
@Override
public void call(final Subscriber<? super MyModel> subscriber) {
subscriber.onNext(MyModel instance);
}
});

我在这里缺少的是:

  1. 我不想发出不同的值(MyModel 的实例),只是想让订阅者知道同一个实例(他们订阅的实例)发生了变化。

  2. 如果我理解正确,那么只要有新订阅者注册,就会调用 call 方法,但这不是我需要的,我只需要在有更新和然后我想通知所有订阅者。

很有可能我把这一切都弄错了,这就是为什么我很乐意了解如何使用 RxJava 来满足我的需求。

谢谢。

最佳答案

我认为最好的选择是 Subjects .所以你可以有这样的东西:

public static class MyModel {
private PublishSubject<MyModel> changeObservable = PublishSubject.create();
private String field1;

public String getField1() {
return field1;
}

public void setField1(String field1) {
this.field1 = field1;
changeObservable.onNext(this);
}

public Observable<MyModel> getModelChanges() {
return changeObservable;
}

@Override
public String toString() {
return "MyModel{" +
"field1='" + field1 + '\'' +
'}';
}
}


public static void main(String[] args) {
MyModel myModel = new MyModel();
myModel.getModelChanges()
.subscribe(System.out::println);

myModel.setField1("1");
myModel.setField1("2");
myModel.setField1("3");
}

因此模型中的所有 setter 都会通知您的模型中发生了一些变化,并且所有订阅者都将获得该数据。

关于java - RxJava - 观察可能总是变化的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38504037/

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