问题标签 [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 投票
4 回答
26345 浏览

android - RxJava:尝试将错误传播到 Observer.onError 时发生错误

我在 Rx 库中收到 IllegalStateException 错误,并且不知道问题的根源在哪里,无论是 RxJava 还是我可能做错了什么。

当证书固定(发生在所有服务器请求上)时发生致命崩溃,但似乎指向会话超时或注销并重新登录。重现步骤(大约发生 25% 的时间)如下:登录,打开列表项 - 滚动一路结束-注销-重新登录-打开应用-关闭应用->崩溃!

有人对如何防止这种情况有任何想法吗?我在这里发现了一个类似的问题Observer.onError 不一致地触发

0 投票
3 回答
8492 浏览

android - 将 AsyncTask 转换为 RxAndroid

我有以下方法可以使用 otto 和AsyncTask.

我需要帮助将其转换AsyncTaskRxJava使用RxAndroid 库

0 投票
1 回答
1129 浏览

android - 将具有多个参数的 AsyncTask 转换为 RxJava

我有多个对 AsyncTask 的调用,我想将其转换为 RxJava。AsyncTask 代码有效,但我只想探索如何在 RxJava 中做到这一点?

(顺便说一句,我知道标题很烂)

它能做什么:

  • 循环通过 MyImageButton(它只是一个 POJO,不扩展 ImageButton)列表
  • 在每个 MyImageButton 上,获取其当前位图(通过 getDrawable())
  • 从 URL 获取图标。
  • 合并两张图片 BitmapUtils.combine(...);
  • 将此新组合的位图分配给 ImageButton

如何将其转换为 RxJava:

这是 BindImageTask:

现在我尝试在此上使用 RxJava,并且我对 RxJava 产生了这种不好的使用(它有效,但我知道有更好的方法):

我想要发生的是:

  • 不必将新组合的图像保存到 ImageLoader 的缓存中。
  • 在订阅回调中,我想引用这个新位图对 MyImageButton 的引用,这样我就可以做一个简单的 myImageButton.setImageBitmap(newBitmap)。

我不想要的:

  • 在 MyImageButton 类中有一个位图引用(因为我必须稍后对其进行序列化)。
0 投票
1 回答
243 浏览

java - 使用 RxAndroid 生成树状结构

我正在尝试使用 RxAndroid。我有我的同步适配器查询服务 A 以获取列表页面(大小 n)。对于页面中的每个项目,我必须提出一个生成另一个行(大小 m)的请求。也就是说,对于 Pages 中的每个项目,都会有 m 行。我想将所有 n 行合并到 1 个大小为 m*n 的列表中并保存到 db 中。

我从服务器获取页面,然后从服务器映射并获取每个页面的行,然后解析 JSON 并获取行的 arrayList。我不确定如何从这里开始。至于现在我想在每一行而不是在每个 ArrayList 上进行迭代。

0 投票
0 回答
450 浏览

android - 包装一个 Observable/订阅

我有一个登录服务在我的活动中使用 Retrofit 和 Observable 返回类型很好地处理:

我想做的是将 doOnNext 和 flatmap 中的逻辑提取到一个单独的类中,并最终在 Activity 中简化为:

并在我的管理器类中处理 API 服务调用。

我正在寻找实现这一目标的最佳方法的建议。我显然希望我的管理器类返回一个 Observable,但是我可以继续使用 Retrofit Observable(并包装订阅吗?)或者我最好让它更同步一点,然后创建并返回一个简单的 Observable?

更新

我遇到了一些示例,这些示例让我考虑通过在我的管理器类中构建操作链并让它全部在我的 Activity 订阅时执行来以不同的方式解决这个问题。我的管理器方法现在使用 defer 并且类似于:

订阅我的活动,如上所示。

希望了解我是否在球场上,或者关于如何更好地处理这个用例的任何建议。谢谢!

更新2

所以延迟在这里没有用。登录方法归结为:

仍然会感谢对这种方法的任何评论/改进。我遇到的大多数例子只是做了他们订阅的所有事情。

0 投票
1 回答
1275 浏览

android - 即使在使用 AndroidSchedulers.mainThread() 时也会调用 CalledFromWrongThreadException

好的,我们实现了一个 MVP 层,很好地展示和使用 RxJava 和 RxAndroid。我们以此为例并以此为基础。

当 Presenter 被调用开始执行时,它Subscriber会向 Model Interactor 提交一个。交互器创建一个Observable并设置observeOn(Schedulers.io())subscribeOn(AndroidSchedulers.mainThread())。这样(我们认为)当调用返回到Subscriber(在 Presenter 内)时,每个调用都将在 UI 线程上。在Subscriber我们将数据绑定到视图中。然而,这引发了一个CalledFromWrongThreadException

堆栈跟踪实际上在这一点上被切断了。

当然,我们可以在 View 中手动在 UI 线程上运行它,但是当我们设置时,这应该不是必需的subscribeOn(AndroidSchedulers.mainThread()),不是吗?我们以前做过,没有问题。我们错过了什么吗?

更多实现细节:我们将 Dagger2 用于 DI,Interactor 是在一个Module并通过构造函数获取调度程序。

Presenter通过构造函数注入获取Interactor,Presenter通过Component.

0 投票
1 回答
1349 浏览

java - RxJava 主题和错误处理

我正在尝试实现类似于事件总线的行为。对于我的要求, aPublishSubject似乎合适。

主题发出表示某些全局操作结果的项目,这些操作可能会成功解决,也可能会在出现异常时失败。我不能onNext()用于成功事件和发生错误的情况下,因为一旦onError()被调用,主题就会终止,并且任何未来的订阅者除了一个之外都不会得到任何排放。ThrowableonError()onError()

现在我看到它的方式我必须创建一个代表事件的类,并且可以选择引用 aThrowable以防出现错误。然而,这似乎是不明智的,因为必须处理内部的错误onNext()

你会怎么做?

0 投票
3 回答
2081 浏览

android - RxJava:如果发生配置更改,如何恢复 observable 的工作?

我使用RxJavaRxAndroid。如果发生配置更改(活动轮换、语言区域更改等),如何恢复可观察对象的工作?

我不仅需要恢复 observable 的工作,还需要保存已发出的项目,当订阅者取消订阅并在订阅后立即发出所有已保存的项目。

我阅读了大量文章,但我没有找到问题的答案。

我找到了几个例子,但没有一个不能解决问题:

0 投票
1 回答
5739 浏览

android - 使用 RxJava 和 Retrofit 的周期性 HTTP 请求

是否可以使用 RxJava/RxAndroid 和 Retrofit 执行定期 http 请求以每 x 秒更新一次数据?

目前我正在使用每 x 秒触发一次的 IntentService 和 Recursive Handler/Runnable。我想知道我是否可以删除所有这些并让 RxJava 处理请求。

编辑

完成后,我最终得到了以下代码。欢迎任何更新。

0 投票
1 回答
2147 浏览

android - 使用 Retrofit 和 Rxjava 显示网络错误对话框

我们正在构建一个使用 Retrofit 与服务器通信的应用程序,如果出现网络错误,则应显示一个对话框(相当于一个 toast),并且在用户单击该对话框后将重做请求。问题是我们想要全局处理它,而不是围绕每个请求编写重复的代码。使用onErrorResumeNext()a.bertucci 在这个问题中描述的可观察视图事件看起来很完美,但不幸的是它在Retrofit.Idle线程中运行并且无法启动任何 UI 元素。有可能解决吗?

一个失败的例子: