问题标签 [rx-android]

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 回答
354 浏览

java - RxAndroid - 如何在 onCompleted() 之后抛出致命异常

我们正在为我们的 api 调用使用 RxAndroid + 改造。

我有点理解为什么序列中的任何异常都会通过 onError() 传递 Throwable。

但是如何结束序列,然后如何处理响应并再次返回抛出致命异常?我原以为 onCompleted() 中的处理会允许这样做,但我仍然看到 onError() 被调用。

下面的简化片段。给出结果 -

谢谢你的帮助

0 投票
2 回答
14585 浏览

java - 在 RxJava/RxAndroid 中为 Activity 生命周期处理订阅的正确方法是什么?

我刚刚开始使用 RxJava/RxAndroid。我想避免上下文泄漏,所以我创建了一个 BaseFragment ,如下所示:

在我扩展 BaseFragment 的片段中,我正在这样做:

所以我想我的问题有两个:

  1. 这是否会因为我取消订阅 onDestroy() 而停止上下文泄漏?

  2. 我是否通过在完成后将订阅设置为 null 并检查 nullity 来正确跟踪 observable 是否“正在运行”?

0 投票
1 回答
1687 浏览

java - RxJava:如何重置长时间运行的热可观察链?

对于我的应用程序的搜索功能,我有一个热的可观察链,它执行以下操作。

  1. 接受用户输入字符串到EditText(a TextChangedEvent) (on mainThread)
  2. 去抖 300 毫秒(在computation线程上)
  3. 显示加载微调器 ( mainThread)
  4. 使用该字符串查询 SQL 数据库(此查询可能需要 100 毫秒到 2000 毫秒之间的任何时间)(打开Schedulers.io()
  5. 向用户显示结果 ( mainThread)

因为第 3 步的长度变化很大,所以会出现竞争条件,即较新的搜索结果显示在较新的结果上(有时)。假设用户想要输入chicken,但由于输入速度很奇怪,单词的第一部分在整个术语之前发出:

  • 首先发送搜索chick,然后发送chicken.
  • chick需要1500ms执行,而chicken需要300ms执行。
  • 这会导致chick搜索结果错误地显示搜索词chicken。这是因为chicken搜索首先完成(仅用了 300 毫秒),然后是chick搜索(1500 毫秒)。

我该如何处理这种情况?

  • 一旦用户通过 a 我不关心旧搜索触发新搜索TextChangedEvent,即使它仍在运行。有什么办法可以取消旧的搜索?

完整的可观察代码:

0 投票
3 回答
3894 浏览

android - RxJava,flatmap 的好用例

我是 RxJava 新手,经常被 flatMap 函数弄糊涂。根据文档,平面图transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable

有人可以为它提供一个好的用例吗?为什么要将原始的 Observable 转换为 Observables(复数)然后将它们转换为单个 Observable。

为什么不直接使用“地图”?

如果您在 Android 中给出一个很棒的示例,否则纯 Java 就足够了。谢谢

0 投票
1 回答
1205 浏览

android - 用 RxJava 替换监听器

目前我正在调查向 RxJava 的迁移,并决定我的经理(accountManager)将是一个有趣的起点。目前,Manager 有一个侦听器列表,并在帐户更新和出现问题时相应地发送更新。

我的 Rx 解决方案涉及Subject

然后当更新发生时,我调用以下方法之一:

问题

问题是一旦onError被调用,任何通过监听的人observe将永远不会从onNext.

我仍然希望订阅者收到 onError 以便他们可以处理错误状态,但稍后onNext仍然可以使用更新的帐户调用,我仍然希望订阅者处理更新的帐户。

我已经尝试过使用 的解决方案onErrorResumeNextonErrorReturn onExceptionResumeNext但它们都没有传播onError.

TLDR:如何在调用 onError 后保持订阅者的状态,同时仍在传播 onError?

0 投票
1 回答
893 浏览

multithreading - RxJava:订阅后阻塞可观察对象?

我特别需要一个可观察的。

通常,我的 observables 在不同的线程中运行。但是,有时他们需要在订阅过程中阻塞另一个线程。未来的行为方式。

一个例子:

突然,另一个线程上发生了一个事件,该事件向当前线程发出信号,表明它应该等待订阅的执行s。(一个例子是 Android 的onPause.)

我怎么做?我如何等待订阅s,甚至可能检索所有结果?

(主题?)

0 投票
1 回答
237 浏览

rx-java - Android Studio 无法识别 AndroidObservables

这听起来像是一个愚蠢的问题。我已经把它放在我的 gradle 文件中

AndroidObservables仍然无法识别并且我的代码无法编译,我已经尝试过同步 Gradle。任何提示?谢谢

0 投票
1 回答
1109 浏览

rx-java - RxJava,如何在 Observables 调用链的不同状态下更新视图?

我需要使用一个 Observable 执行一项任务,获取发出的数据,然后使用另一个 Observable 执行另一个查询。通常我会使用 aflatmap来链接两个 Observable,只关心发出的最后一条数据。现在需要在此过程中更新视图。假设当第一个 Observable 发出数据时,我应该在 UI 上显示一个文本行。

我知道我可以将其分解为两个调用时间,onNext()在第一个调用内部调用第二个 Observable,但这很麻烦。

我怎样才能在不走这条路的情况下实现我上面描述的目标?谢谢

0 投票
1 回答
2265 浏览

android - RxJava:在每个订阅者处理资源后关闭资源

我是 RxJava 的新手,我正在努力弄清楚如何正确关闭资源,尤其是在处理多个订阅者时。

我有一些资源Observable<T>在哪里(例如,一个 Android 数据库.TCloseableCursor

我可能在 observable 上有多个订阅者。我想close()在每个订阅者处理完资源后获取资源。换句话说,在新资源交付/发出后关闭旧资源,并在最后一个订阅者取消订阅时最终关闭最后一个。

我尝试使用我调用的自定义运算符使其工作AutoCloseOperator,它几乎可以工作,但不太正确。即我仍然处于竞争状态和/或泄漏,例如资源没有被关闭。

在 RxJava 中执行此操作的正确方法是什么?

说我有这个代码:

然后我期望以下行为:

注意:我没有PublishSubject在我的真实代码中使用它,我只是在这里用于说明目的,我使用它在每次更新数据库表时Observable.create发出...Cursor

概括问题:我可以只使用doOnNextdoOnUnsubscribe关闭旧项目,但这并没有考虑到这些事件会发生多次(对于每个订阅者),我只想在所有订阅者都有时关闭资源收到新商品。

是自定义运营商使用lift()的方式,还是有一些现有的运营商可能会对此有所帮助?

我已将我的问题简化为GitHub 上的一个小型命令行应用程序。感谢您的关注!

0 投票
1 回答
238 浏览

rx-java - 添加 RxBinding 时出现此错误

添加 RxBinding 时出现此错误

应该遵循建议或将我的 sdk:minSdkVersion 升级到 15 还是有更好的解决方案?