【问题标题】:Asynchronously Publish to Observable/Subject异步发布到 Observable/Subject
【发布时间】:2015-03-04 17:36:19
【问题描述】:

虽然我认为我已经掌握了如何使用 RxJava 的基础知识,但我在使用观察者模式时遇到了麻烦。

基本上,我想要做的是有一个静态的List 对象,我可以监控,并使用添加到列表中来将此数据提交给网络服务。

到目前为止,我的方法只是创建一个static List<Object> 和一个static Observable<Object>。这个 observable 是通过做一个

observable = Observable.from(listOfObjects);

然后,我的上传逻辑包含在 .subscribe() 调用中。如果我提前设置了List,这将起作用,但我想在运行时到处填充它。如果我再次致电.subscribe(),这仍然有效,但感觉就像我这样做是做错了什么。我以为我可以让现有订阅只对从可观察对象发出的任何新项目采取行动,但是当我添加到列表时似乎没有发生任何事情。

感谢任何关于更好/正确方法的见解。

【问题讨论】:

  • 我很好奇这个问题的答案,我肯定也会使用它。我认为 RxJava 本身没有任何解决方案,我们想要的基本上是 stackoverflow.com/questions/7260746twistedoakstudios.com/blog/…
  • dwursteisen 的回答是正确的。您必须围绕 List 创建一个包装器,以便在列表中添加或删除项目时通知订阅者。

标签: rx-java rx-android


【解决方案1】:

Observable.from(listOfObjects) 将创建一个新的 observable,它将发出列表的每个对象。你也可以写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)

【讨论】:

  • 这对我很有效。仍然觉得应该有一个稍微不那么冗长的方法,但这可能只是我缺乏理解。 :)
猜你喜欢
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多