java—如何在rxjava中的列表更改时通知obsever

qyuhtwio  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(317)

我有三节课。首选、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?

sgtfey8w

sgtfey8w1#

通过设置 Pref.prefList = loadDataFromSomeSource(); ,将新的列表示例分配给 Pref.prefList . 这不会更新 Pref.observable 无论如何,因为这仍然是指旧的 Pref.prefList 示例。
我也认为你不能用 Observable 通过它发布事件。据我所知,你需要一个 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");

或者,在你的情况下:在课堂上 Pref ,您可以使用 public static PublishSubject<ArrayList<Pref>> source = PublishSubject.create(); . 加载数据时,可以使用发布新数据 onNext ,就像这样 ClassB : Pref.source.onNext(loadDataFromSomeSource())

相关问题