RX Java Obsever Pojo模型进行更改

时间:2018-07-11 08:04:28

标签: java android rx-java2

如何使用检测更改POJO模型? 查看示例

public class User {
     String firstName;
     String latsName;
}

public void main(){
    User user = new User();
    user.setFirstName("rasoul");

    //detect change by rxJava or Rx android

}

我需要使用rxjava来检测变更模型用户

2 个答案:

答案 0 :(得分:1)

一种方法是使用主题。您可以公开Observer的基础Subject并进行订阅。要通知您的数据更改,只需致电Subject.onNext,所有订阅者都将收到更新的数据。

您可以在此处了解有关Subject t的更多信息

答案 1 :(得分:1)

您需要使模型可观察更改。

git push -u origin master

因为现在您可以观察到用户:

public class User {
     public interface ChangeListener {
         void onChanged(User user);
     }

     private List<ChangeListener> changeListeners = new CopyOnWriteArrayList<>();

     public void addChangeListener(ChangeListener listener) {
         this.changeListeners.add(listener);
     }

     public void removeChangeListener(ChangeListener listener) {
         this.changeListeners.remove(listener);
     }

     private String firstName;
     private String lastName;

     public void setFirstName(String firstName) {
         this.firstName = firstName;
         for(ChangeListener changeListener: changeListeners) {
             changeListener.onChanged(this);
         }
     }
}

现在您可以轻松地将其包装为可观察的:

user.addChangeListener((u) -> {
    // user changed
});

现在您可以做

public class RxUser {
    private RxUser() {}

    public static Observable<User> observe(final User user) {
        return Observable.create((emitter) -> {
              final User.ChangeListener changeListener = (user) -> {
                  emitter.onNext(user);
              }

              emitter.setDisposable(Disposables.fromAction(() -> { user.removeChangeListener(listener); }));

              user.addChangeListener(listener);
        });
    }