问题标签 [rx-java]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
301 浏览

android - 来自数组的回复主题

在 android 应用程序的上下文中,我想ReplaySubject从我从保存的包中检索的数组创建一个。

到目前为止,我有:

我希望有一种更直接的方式来避免迭代。

0 投票
1 回答
3423 浏览

android - 使用 RxJava 支持链接改造服务

我在使用改造的 RxJava 支持链接可观察对象时遇到问题。我可能误解了如何使用它,否则它可能是改造中的错误。希望这里有人可以帮助我了解发生了什么。编辑:我将 MockRestAdapter 用于这些响应 - 这可能是相关的,因为我看到 RxSupport 实现略有不同。

这是一个假的银行应用程序。它正在尝试进行转账,并且在转账完成后,它应该进行账户请求以更新账户值。这基本上只是我尝试flatMap的一个借口。不幸的是,以下代码不起作用,没有订阅者收到通知:

案例 1:链接两个改造产生的 observables

传输服务(注意:返回一个改造产生的 observable):

帐户服务(注意:返回一个改造产生的可观察对象):

将两个改造产生的 observables 链接在一起:

案例 2:创建我自己的 observable 并与改造生产的一个链接

如果我忽略 Retrofit 中对“平面映射”调用的内置 Rx 支持,它会完美运行!所有订阅者都会收到通知。见下文:

新的帐户服务(注意:不产生可观察的):

创建我自己的 observable 并自己发出项目:

任何帮助将不胜感激!

0 投票
4 回答
7367 浏览

java - Android 上 rxjava 的默认调度程序

我正在使用 Retrofit 为我的异步网络调用返回 rxjava Observable。

我发现自己在重复以下调用:

someApiCall().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())

好像我总是订阅 IO 线程并观察 Android 主线程。这似乎是我发现的所有资源都提倡的最佳实践。也许除了长时间运行的计算之外,我不太明白我们什么时候想要偏离这种模式。

有没有办法通过默认 subscribeOn 和 observeOn 线程来删除这个样板?

这是rxjava 插件的用例吗?(我找不到很多使用它们的例子。)

我可以通过弄乱改造执行器来在网络边界设置默认线程吗?

0 投票
2 回答
2139 浏览

rx-java - 如何使用响应式扩展按空闲时间对事件进行分组

我有一个反应式扩展似乎特别适合的问题。我有一个事件源,它在较短的突发中创建事件,其间有相对较长的空闲期。我想将这些事件分批分组,其中(理想情况下)每次突发事件都会以一批结束。使用 RxJava,有没有好的方法来做到这一点?Observable.buffer(Observable)Observable.buffer(Func0)看起来很有希望,但使用Observable.window()或 Observable.groupByUntil() 可能是可行的。

0 投票
1 回答
999 浏览

scheduler - rxjava:具有默认空闲作业的队列调度程序

我有一个客户端服务器应用程序,我正在使用 rxjava 来处理来自客户端的服务器请求。客户端一次只能执行一个请求,因此我打算使用类似于蹦床调度程序的线程队列调度程序。

现在我尝试实现一种机制来观察服务器上的变化。因此,我发送了一个长期存在的请求,该请求会阻塞,直到服务器发生一些更改并发回结果(长拉)。

这个长拉请求应该只在作业队列空闲时运行。我正在寻找一种在安排常规请求时自动停止监视请求并在队列变空时重新启动它的方法。我考虑过修改蹦床调度程序以获得这种行为,但我觉得这是一个常见问题,可能有更简单的解决方案?

0 投票
2 回答
5618 浏览

android - Observer.onError 触发不一致

我正在使用 Retrofit 访问我的 API,如下所示:

以下是我访问 API 的方式:

这工作得很好,除非出现异常(即 IOException,或连接超时),onError 方法不会被触发,而是在主线程上收到异常,终止我的应用程序。

但是,对于某些情况(例如,当 API 调用响应状态码 400 时),onError 方法会按预期触发。

挖掘 logcat 输出后,我发现了这一行,(不知道我应该如何处理这个问题)

rx.exceptions.OnErrorFailedException:尝试将错误传播到 Observer.onError 时发生错误

有人可以让我知道我在哪里做错了吗?

0 投票
1 回答
1547 浏览

android - AndroidObservable 从不观察主线程

我正在尝试使用RxJava for Android。我正在尝试一个简单的示例,我试图在后台线程上卸载更长的操作,然后期望回到主线程并执行 ui 操作。

我从一个EditText onTextChangeListener(通过漂亮的 ButterKnife 注入)获取搜索文本,然后将其发送到一个长时间运行的操作_searchForContacts(searchText),该操作返回一个联系人对象列表。然后我通过在我的适配器上设置信息并通知数据集更改来继续更新我的视图。

但是,我在尝试进行任何 ui 更新时遇到了异常,因为我从来没有在主线程上。

这是我的代码:

它说onNext总是在后台线程上调用。我得到了通常的IllegalStateException: The current thread must have a looper!例外。日志语句还表明我不在onNext.

是什么赋予了?

0 投票
3 回答
5654 浏览

android - 用 RxJava 替换 EventBus - N 个订阅者总是在监听

我正在用一个 Android 应用程序替换一个EventBus模式。RxJava我有事件提醒任何感兴趣的各方更新我的缓存单例中的数据。任何时候调用 Web 服务,数据都会更新,并且订阅者会通过发布的事件收到警报。

我在 RxJava 中使用AsyncSubject. 观察者从主题中得到一个事件,然后他们得到一个onComplete事件并取消订阅。这在 UI 第一次加载时起作用,但是当需要刷新数据时,不会通知订阅者。我如何告诉那些Subscribers继续收听onNext来自 的更多事件Subject

我需要一个Subject报告最新项目的报告。PublishSubject仅在订阅后发出项目,因此不太符合我的需求。我的订阅者在不同的时间开始观察(可能在第一个数据事件之后),所以我需要主题发出观察到的最后一个项目,然后为后续项目保持流打开。似乎我需要 AsyncSubject 和 PublishSubject 的组合。有没有办法通过内置的类来实现这一点,还是我需要创建自己的主题?

0 投票
2 回答
1244 浏览

java - 使用过滤器从地图中删除元素

我在 rx.Observable 中有一个 java.util.Map,我想过滤地图(根据给定的键删除一个元素)。

我当前的代码是命令式和函数式的混合体,我想在不调用isItemInDataThenRemove.

0 投票
3 回答
6844 浏览

java - RxJava中对缓冲区的错误理解

我正在尝试熟悉 RxJava。这是我要实现的用例:

我的屏幕上有一个按钮,我正在尝试收集点击次数。因此,如果用户点击按钮,则会注册一次点击并生成日志。现在,如果用户单击按钮两次,那么它会记录两次单击,收集它们并输出 2 而不是 1。

本质上,我试图在一段时间内累积点击次数,然后吐出最终结果。我猜“缓冲区”是我需要使用的方法。我在 Android 中创建了一个快速示例(代码如下),但缓冲区方法似乎并不像收集所有事件输入并吐出一个集合那么简单。

任何人都可以帮助我理解我在这里理解的误解吗?

问题 1:我希望_getObserver()'sonNext向我发送一份包含累计点击次数的列表。因此,如果按钮被点击 5 次,那么我期待一个包含 5 个项目的列表,每个项目的值都为“1”。使用现有代码,我总是得到一个空列表。

问题 2List<Integer> integers :如果通过检查大小没有收到任何事件,我基本上会做一个控制台日志。如果列表不为空,我会输入控制台日志,说“未收到点击”。看来 Observable 永远不会停止。它几乎就像一个计时器,它不断地持续不断,即使没有注册按钮点击。如果在过去 10 秒内没有注册任何事件,有没有办法停止 Observable?

问题 3:发射的数量似乎几乎呈指数增长。这几乎就像它收集所有以前的按钮空水龙头一样。