rx-java观察pojo模型的变化



如何使用检测更改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来检测更改模型用户

您需要使您的模型对更改具有可观察性。

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);
});
}

现在你可以做了

User u = new User();
Disposable disposable = RxUser.observe(u).subscribe((user) -> {
// will be called for changes
});
u.setFirstName("hello");
一种方法是使用主题。您可以公开Subject的底层Observer并订阅它。要通知您的数据更改,只需调用Subject.onNext,所有订阅方都将收到更新的数据。

你可以在这里阅读更多关于主题

最新更新