java - 如何在 Rxjava 中的列表更改时通知观察者
问题描述
我上三班。Pref、A 类和 B 类。
public class Pref{
public static ArrayList<Pref> prefList;
public static Observable<ArrayList<Pref>> observable;
public static void loadData(){
prefList = getFromDb();
observable = Observable.just(prefList);
}
}
应用程序首先运行 ClassA。
public ClassA{
public ClassA(){
initObserver();
setObserver();
}
public void initObserver(){
Pref.loadData();
}
public void setObserver(){
Observer<ArrayList<Pref>> obs = new Observer() {
@Override
public void onSubscribe(Disposable dspsbl) {
System.out.println("Subscribed");
}
@Override
public void onNext(ArrayList<Pref>> t) {
System.out.println("Loading Preference.");
//Need to do some other works here.
}
@Override
public void onError(Throwable thrwbl) {
}
@Override
public void onComplete() {
}
};
Pref.observable.subscribe(obs);
}
}
现在我想从 ClassB 更改列表。
public class ClassB{
private void changeList(){
Pref.prefList = loadDataFromSomeSource();
}
}
当我跑步ClassA
时,System.out works
很好。但是当我从ClassB
没有任何事情发生更改列表时。我的问题是,使用Rxjava
. 是用来Rxjava
建的吗?如果我错了,我该如何实现这个功能?我怎样才能写几个ClassA
类似的类,以便在ClassB::changeList()
运行时,我可以听它ClassA?
解决方案
通过设置Pref.prefList = loadDataFromSomeSource();
,您将一个新的列表实例分配给Pref.prefList
. 这不会Pref.observable
以任何方式更新,因为这仍然指的是旧Pref.prefList
实例。
我也认为您不能使用 anObservable
通过它发布事件。据我了解您的情况,您需要一个ObservableSource
(请参阅http://reactivex.io/RxJava/javadoc/io/reactivex/ObservableSource.html)。例如,它由PublishSubject
. 你可以像这样使用它:
PublishSubject<String> source = PublishSubject.create();
source.subscribe(System.out::println);
source.onNext("test 1");
source.onNext("test 2");
source.onNext("test 3");
或者,在您的情况下:在 class 中Pref
,您可以使用public static PublishSubject<ArrayList<Pref>> source = PublishSubject.create();
. 加载数据时,您可以使用 发布新数据onNext
,如下所示ClassB
:Pref.source.onNext(loadDataFromSomeSource())
推荐阅读
- tensorflow - 在 TF 2.3 和 tf.keras 中更改全卷积网络输入形状
- angular - Angular9 rxjs-behaviorsubject 不适用于不同的组件?
- c - 这个程序以什么方式访问非法内存?
- reactjs - 如果值不变,Redux 触发减速器
- jquery - 即使使用 .on(),jQuery 事件也不会在附加元素上触发
- javascript - 如何在发出 GET 请求时发送 jwt 令牌以进行验证
- node.js - primeng 的 p-button-label 类破坏了按钮大小不明白为什么?
- python - 是否可以在 RPi4 上更改蓝牙配置文件?
- ios - GTM - iOS 自定义标签未触发
- python - Django通过模型的自定义管理器过滤相关字段