我有三节课。首选、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);
}
}
现在我想更改B类的列表。
public class ClassB{
private void changeList(){
Pref.prefList = loadDataFromSomeSource();
}
}
当我跑的时候 ClassA
,的 System.out works
好的。但是当我把名单从 ClassB
什么都没发生。我的问题是,正确的工作方式 Rxjava
. 是给你的吗 Rxjava
建造?如果我错了,我该如何实现这个功能?我怎么写几个 ClassA
喜欢上课,所以当 ClassB::changeList()
跑步,我可以听进去 ClassA?
1条答案
按热度按时间sgtfey8w1#
通过设置
Pref.prefList = loadDataFromSomeSource();
,将新的列表示例分配给Pref.prefList
. 这不会更新Pref.observable
无论如何,因为这仍然是指旧的Pref.prefList
示例。我也认为你不能用
Observable
通过它发布事件。据我所知,你需要一个ObservableSource
(见http://reactivex.io/rxjava/javadoc/io/reactivex/observablesource.html). 例如,它是由PublishSubject
. 你可以这样使用它:或者,在你的情况下:在课堂上
Pref
,您可以使用public static PublishSubject<ArrayList<Pref>> source = PublishSubject.create();
. 加载数据时,可以使用发布新数据onNext
,就像这样ClassB
:Pref.source.onNext(loadDataFromSomeSource())