虽然我认为我已经掌握了如何使用 RxJava 的基础知识,但我在使用观察者模式时遇到了困难。
基本上,我想做的是有一个静态 List
我可以监视的对象,并使用列表中的添加项将此数据提交到 Web 服务。
到目前为止,我的方法就是创建一个 static List<Object>
和一个 static Observable<Object>
。这个可观察量是通过执行以下操作创建的
observable = Observable.from(listOfObjects);
然后,我的上传逻辑位于 .subscribe()
中称呼。如果我有 List
这就会起作用一切都提前设置好,但我想在运行时到处填充它。如果我调用.subscribe()
,这仍然有效。再次,但感觉我这样做是做错了什么。我以为我可以让现有的订阅只对从可观察对象发出的任何新项目起作用,但当我添加到列表中时似乎没有发生任何事情。
任何有关更好/正确方法的见解都将受到赞赏。
最佳答案
Observable.from(listOfObjects)
将创建一个新的可观察对象,该可观察对象将发出列表中的每个对象。你可以写Observable.just(1, 2, 3, 4)
也。这是同一件事。
因此,如果您将一个对象添加到列表中,Observable
不会收到通知。
您可以创建一个自定义列表来通知您的 Observable
来自新添加的项目。您将在主题中看到与他非常接近的解决方案:How can I create an Observer over a dynamic list in RxJava?
但是,您可以使用您的列表,也许可以使用 Subject
反而 ?无需将对象添加到列表中,只需调用 theSubject.onNext
方法。
请注意,您只会在添加项目时收到通知。当项目被删除时,您不会收到通知。如果您愿意,您的Observable
不应该发出添加的项目,而是发出具有关联状态的项目:new Added<Object>(item)
, new Removed<Object>(item)
例如。
关于rx-java - 异步发布到 Observable/Subject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841422/