java - 如何在 RxJava 中正确使用 observable 和 observer?
问题描述
首先,感谢大家花时间帮助我。我不确定我写的波纹管代码是否正确。因此,如果您确实看到任何问题,请告诉我,并可能提出一些解决方法。
所以我想在我的 2 个类中应用 rxjava 来呈现观察者和可观察者。这样,每当通过单击 JavaFX 中的按钮,可观察到的 currentPage 发生变化时,观察者都会得到通知和更新。尽管代码运行良好,但我不确定每次创建一个可观察变量是否正确?而且 onComplete 是否会取消订阅或进行一些清理(我怀疑我的代码可能有一些泄漏内存)。由于我找不到任何对此有明确总结/解释的在线资源,我真的需要你们的帮助。谢谢!
P/s:我是 RxJava 新手,所以请不要对我苛刻。谢谢!
所以 PrimaryInfoModel 是观察者:
public class PrimaryInfoModel {
private int currentPage;
private int currentCategory;
public static Observer<Integer> getPageObserver() {
return new Observer<>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
System.out.println("onSubscribe");
}
@Override
public void onNext(@NonNull Integer integer) {
System.out.println(integer); currentPage = integer;
}
@Override
public void onError(@NonNull Throwable e) {
System.out.println(e.getMessage());
}
@Override
public void onComplete() {
System.out.println("Complete");
}
};
}
}
NavigationController 是可观察的:
public class NavigationController implements Initializable {
private int currentPage;
private Observable<Integer> observable;
public NavigationController() {
}
@FXML
private Button page1, page2, page3, page4, page5, prevPage, nextPage;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
setCurrentButton();
}
@FXML
private void setCurrentButton(MouseEvent event) {
int oldPage = currentPage;
cleanEffect();
Object source = event.getSource();
if (source == page1) {
currentPage = 0;
}
if (source == page2) {
currentPage = 1;
}
if (source == page3) {
currentPage = 2;
}
if (source == page4) {
currentPage = 3;
}
if (source == page5) {
currentPage = 4;
}
if (oldPage != currentPage) {
observable = getObservable();
observable.observeOn(Schedulers.io()).subscribeOn(Schedulers.io()).subscribe(PrimaryInfoModel.getPageObserver());
}
}
private Observable<Integer> getObservable() {
return Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(@NonNull ObservableEmitter<Integer> emitter) throws Throwable {
emitter.onNext(currentPage);
emitter.onComplete();
}
});
}
}
解决方案
推荐阅读
- javascript - 关于数据表源数据访问
- go - 在主块中捕获错误后程序恐慌。恐慌:运行时错误:无效的内存地址或零指针取消引用
- c# - 如何使用 C# 比较两个 Json 对象
- javascript - 如何计算四舍五入的月份和天数,直到目标日期忽略时区和 DST?
- java - Spring 集成 SLA 选项
- android - Android - Firebase 身份验证失败
- javascript - 如何在 Odoo 10 中为树视图创建小部件?
- r - R markdown 中的钩子
- python - 用新的词向量重新训练现有的 word2vec 模型
- javascript - 显示 [object object ] 而不是变量中的数据:离子