问题标签 [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 回答
2808 浏览

android - RxAndroid:同步执行一个 observable

我从使用 RxAndroid 的 Rx 开始,我想通过其 API 和 Retrofit 列出 GitHub 用户的名称。每个 API 请求带来 100 个用户,在我处理完所有用户之后,我想获得下一个 100 个用户,但我不知道该怎么做。任何人都可以帮助我吗?

我的一些代码片段在哪里

改造界面

用户类

还有我活动的 onCreate 方法

0 投票
2 回答
3700 浏览

android - 依赖 Robolectric / RxJava / RxAndroid 的 Android 应用程序单元测试

我正在使用 Robolectric 3.0 快照。

我有一个测试:

这里的关键是,如果 API 报告用户存在(它从上面的模拟中执行),则登录按钮文本应该与名为的字符串资源的值相同R.string.button_login

更改按钮状态的设置在我的 Activity 中完成,如下所示:

ReactiveEditText.textObservableForTextView 只是以反应方式包装了 textChangedListener 接口:

usernameAvailable 接收上面的模拟数据,如下所示:

请注意,我正在使用“立即”调度程序来监听 EditText 的更改。我的困惑是:单元测试总是失败,在我看来(当我跳入调试器时)assertThat测试中的语句在观察者看到 EditText 的变化之前就被触发了。我确实在调试器中看到 Observer 最终会触发,并且在 signInButton 上正确设置了文本。我认为使用即时调度程序会让一切都像我期望的那样在setText被调用后直接发生。

0 投票
1 回答
2647 浏览

android - 使用 RxJava 返回结果值

我想在 WebView 中使用 RxJava 实现点击去抖动。
例如,用户快速点击链接,我只想处理第一次点击。
首先,我认为throttleFirst这对它有好处。

throttleFirst工作正常,但我注意到我不能以这种方式返回值。

问题:
当方法具有返回类型时,如何使用 RxJava 返回值shouldOverrideUrlLoading
或者我不应该在这种情况下使用 Rx 吗?(采用另一种方式,例如更改标志Handler#postDelayed?)

0 投票
1 回答
268 浏览

android - 关于在 Android 上使用 Volley(和 SimpleXML)检索/刷新数据的问题

我的 Android 应用程序显示的所有数据都取自 XML 文件。我正在使用 Volley 检索数据,并使用 SimpleXML 将 XML 数据映射到使用 Volley 自定义 Request: 的对象SimpleXmlRequest

每次我刷新内容时,它都会读取整个 XML 文件并再次创建每个对象,我觉得这不是最好的方法,因为这个文件可能非常大。所以我对此有几个问题:

  1. 有没有办法“订阅” XML 文件以仅检索添加在其上的 项目,避免每次都读取整个文件?我知道 Volley 可以缓存,但在这里没有太大帮助。
  2. 是否可以使用 SimpleXML 框架进行 SimpleXml数组请求?这会有帮助吗?因为我真的不想自己解析文件......
  3. 如果没有,是否值得从 XML 切换到 Json以便我可以使用 JsonArrayRequest,或者我是否必须读取整个文件并刷新每个项目?我以前从未使用过它。
  4. 源文件中的许多项目都显示为列表, RecyclerView但是,当我再次刷新时,我必须删除它之前拥有的项目并再次添加它们,因为我一次获取所有项目,因此无法使用 RecyclerView.notifyDataSetChanged().

我读了很多书,直到发现 RxJava 和 RxAndroid 看起来很完美,但在上面集成 Volley 和 SimpleXML 看起来太难了......所以我希望你能帮助我:)

谢谢!

0 投票
1 回答
3985 浏览

android - Android + RxJava - 从数据库和网络服务加载数据

我想使用 RxJava 从 Web 服务加载数据(通过 Retrofit)。我也有以前结果的数据库缓存。

假设我已经有每个这些的 observables:

我想将这两个 observables 合并为一个:

我想要的行为是让订阅者尽快接收数据库结果,然后在他们进来时接收 restService 结果(假设从数据库中获取比进行网络调用更快)

我自己能想到的最好的方法是:

这对我来说似乎有点 hacky,我觉得对于这样一个常见的场景,必须有一个更好的解决方案。

如果网络 observable 发生错误,db 结果仍然可以通过,那也很好。我可以调用onErrorResumeNext()并返回 dbObservable 本身,但我仍然希望通知订阅者发生错误。

有什么建议么?

0 投票
2 回答
1711 浏览

retrofit - 只有在前面的 observable 成功时才调用服务

背景

我只是深入研究 RX for java 的概念。坦白说,我不明白。在我的项目中,我使用改造库来调用服务。目前,我已经使用回调实现了所有服务。如果我想编排服务调用,我必须在回调中调用回调,这会导致代码相当混乱。

问题

对于以下两个服务,我想调用服务 B iff 服务 A 使用 Observables 方法成功完成。

我正在寻找可用于我的任务但没有任何运气的Observable 运算符。我可以想象这样的操作员:

0 投票
1 回答
1238 浏览

android - AppObservable 对于 Android 来说是必须的吗?

在 android 应用程序中,AppObservable是每个 observable 必须的吗?

我有一个改造生成的 Observable ,由Dagger注入:

在这个例子中

我应该像这样覆盖“用户”onViewCreated()吗?

此外,如果我不直接注入 Observable ,而是注入an Object containing an Observable

在 CachedValue 中,有一个 Observable(跳过其他字段):

我应该用AppObservable 提升 Observable替换这个Observable吗?

所有这些代码在模拟器中没有 AppObservable 的情况下完美运行(我确实取消了这些订阅onDestroyView()),但我不知道在实际情况下是否足够?长时间运行后会有内存泄漏吗?

在 rx-android 的示例项目中,到处都能看到 AppObservable。但我不知道如何正确处理注入的 Observables(或包含 Observables 的对象)。

非常感谢 。

0 投票
0 回答
131 浏览

android - 片段中的CompositionSubscription为空?

为什么我总是在这个复合订阅上获得 NPE,无论我把它放在片段中的哪个位置。

我把订阅放在 onResume 中,同样的错误发生了。

0 投票
1 回答
1683 浏览

rx-java - 异步发布到 Observable/Subject

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

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

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

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

感谢您对更好/正确方法的任何见解。

0 投票
2 回答
12355 浏览

asynchronous - rxjava 在创建 observable 后添加项目

我刚开始使用 rxjava 就被卡住了。也许我没有以正确的方式使用 rxjava,但我需要Observable在它创建后添加项目。所以我知道你可以打电话Observable.just("Some", "Items")并且订阅者会收到它们,但是如果我有一个异步任务并且我需要在任务完成后添加更多项目怎么办?我找不到类似的东西Observable.addItems("Some", "More", "Items")