我试图跳上反应潮流,但在阅读并经历了很多例子之后,我仍然没有找到我正在寻找的东西.
我有一个模型对象,可能会在应用程序的生命周期中的任何时间发生变化.
更改可能来自更新它的特定请求(来自服务器,数据库等),也可能因应用程序中触发的事件而更新.
我的问题是如何创建Observable这样一个对象,如何在发生变化时不断更新订阅者?
从我到目前为止看到的,我可以像这样创建observable:
Observable.create(new Observable.OnSubscribe<MyModel>() {
@Override
public void call(final Subscriber<? super MyModel> subscriber) {
subscriber.onNext(MyModel instance);
}
});
Run Code Online (Sandbox Code Playgroud)
我在这里缺少的是:
我不想发出不同的值(实例MyModel)但只是想让订阅者知道相同的实例(他们订阅的实例)已经改变.
如果我理解正确,那么call每当新订户注册时都会调用该方法,但这不是我需要的,我需要在有更新时才采取行动,然后我想通知所有订户.
我很有可能把这一切都搞错了,这就是为什么我很高兴能够理解如何用RxJava来满足我的需求.
谢谢.
Div*_*ers 18
我认为做这样的事情的最佳选择是主题.所以你可以这样:
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");
}
Run Code Online (Sandbox Code Playgroud)
因此,模型中的所有setter都会通知模型中的某些内容已更改,并且所有订阅者都将获得该数据.
| 归档时间: |
|
| 查看次数: |
3129 次 |
| 最近记录: |