问题标签 [rx-java3]

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 投票
0 回答
30 浏览

java - 使用 RxJava3 从房间数据库的片段中填充 Spinner 问题

概述 我正在尽力遵循 MVVM 模式。在我的数据模型中,我有一个实体“语言”及其通过存储库访问的相应 DAO。反过来,这个存储库提供我的视图模型,并通过我的片段中的工厂实例化。或者,从另一个方面来说,我的片段 -> ViewModelFactory -> ViewModel -> Repository -> DAO -> Entity

我对 ArrayAdapters “适合” MVVM 模式的位置感到有些困惑。特定片段旨在显示一堆字段(名称、语言等),作为应用程序中的“个人资料”创建页面。

问题: 我试图填充带有语言列表的旋转器,以便在选择旋转器中的语言时,在软件中实际使用了相应的值(思考:文本值对)。我真的不知道自己在做什么,但我正在尽可能快地失败。目前,我在片段 onViewCreated 方法中遇到以下错误:

Android Studio 错误:“无法解析 'Observable' 中的方法 'observe'”

代码

语言实体

存储库

SpinLang 适配器

视图模型

分段

语言课 不要与语言混淆!

这是因为我认为使用扩展 LiveData 而不是 RxJava Single<List> 的东西可能更容易。基于此处提供的答案:When to use RxJava in Android and when to use LiveData from Android Architectural Components? (看看kzotin的回应)。这是我的尝试。

我试过的

我真的尝试过引入此处介绍的文本值对功能: Populate Spinner from LiveData (Room Database) (这让我摸不着头脑,为什么“观察”会导致问题)。

使用此处介绍的 Observable 机制: 将 Single<List<Item>> 转换为 Observable<Item>?

...以及这里的 ID 内容(我已经评论了很多来自下两个链接的代码,因为我什至没有走那么远): Android:如何将微调器绑定到自定义对象列表?Android - 将 Spinner 配置为使用数组

通常困扰我的问题是我无法使用 for-each 循环遍历 Single<List> 对象,因为当我去将“语言”对象列表转换为“语言”对象列表。

我以为我可以将语言对象作为 Singles 检索,然后在 .map 或 .flatMap 函数中将它们添加到我的 List onObservable 中,但这导致我来到这里。

问题

  1. 我对访问存储库的位置和处理 Spinner 的初始化的选择对于 MVVM 模式是否合理?我想确保我正在使用框架,而不是反对它,但我不知道我在做什么,并且使用 RxJava,感觉很好。我在想,如果我对如何更好地组织我的代码有一些指导,那么也许它会让我避免尝试做一些愚蠢的事情。

  2. 我什至应该尝试让“中级”“language.java”类工作,还是完全放弃它?换句话说,我是否应该不担心将 RxJava 转换为 LiveData 可能有什么优势(或者我认为我理解的优势)?似乎我误解了什么,混淆了我的代码,让我的生活变得比需要的更艰难。

  3. 应该怎么做?

  4. 我应该在我的 subscribeToModel 中做什么?我读过应该为服务保留业务逻辑。所以,到目前为止,在我看来,存储库应该负责将事物传递给计算,但我对如何对“填充”逻辑进行分类有点模糊,因此对对片段进行任何形式的操作犹豫不决等级。然而,这让我想知道“好吧,那应该去那里做什么??”

非常感谢您对此提出的任何建议。

0 投票
1 回答
56 浏览

android - RxJava takeWhile 似乎被忽略了。应该只在第一页执行

我正在尝试使用 workmanager 批量上传数据库实体。工作正常,但是进行分页的服务没有按预期工作。

我想做的事:

  1. 对我需要上传的数据库条目进行分页(服务器上的最后一个时间戳比客户端上的更新)。获取页面作为List
  2. 将条目映射到 api 对象
  3. 将实体传递给另一个触发 API 调用的方法,发送条目列表

问题:

  1. 分页似乎忽略了takeWhile运算符并执行,直到达到最大执行限制
  2. uploadEntitiesFor调用永远不会执行

接口:

页面供应商来自Room Dao,例如(它是一个内部应用程序,我需要存储每个用户的东西......):

执行期间,日志输出:

我现在只有一个合作伙伴要上传。不会触发上传,并且分页仍然执行,直到达到限制并且在第一页之后不会停止。

0 投票
0 回答
91 浏览

android - RxJava:如果返回 Single 的函数抛出异常,如何捕获错误?

我在下面有这个功能:

userRepository.getUser()返回Single<User>

我在下面有一个单元测试:

我希望能够捕获.doOnError块内的异常,但它不起作用。

我在这里做错了什么?

谢谢

0 投票
1 回答
78 浏览

kotlin - Kotlin Flow 中的 RxJava BehaviorSubject#onError(Throwable) 等效项

我在一个项目中将一些 RxJava 代码转换为 Kotlin Flow。

我遇到了一段BehaviorSubject#onError(Throwable)被调用的代码。

我没有找到任何方法来处理Flow对象。

有什么办法吗?

0 投票
1 回答
173 浏览

java - 当 minifyEnabled 设置为 true 时,Rxjava3 无法按预期工作

当我将 build.gradle 中的 minifyEnabled 设置为 true 时,当我正确浏览日志和 API 响应时,似乎 rxjava3 突然无法按预期工作。

所以我要做的是创建一个空的新项目。

  1. 导入 Rxjava3 (3.0.13): implementation "io.reactivex.rxjava3:rxjava:3.0.13"

  2. 将 buildTypes 更改为:

  1. 将 MainActivity.java 的 onCreate 函数更改为:
  1. 在 onSuccess 中设置断点,然后连接设备并按调试。
  2. 在 onSuccess 中,您将得到 null 而不是“Test”。

如果将调试的 minifyEnabled 切换回 false,它将按预期工作。我还在 proguard-rules.pre 文件中添加了这些行:

那没起效。

有人可以告诉我从这里走的路吗?先感谢您。

0 投票
0 回答
119 浏览

android - 使用共享 ViewModel 跨片段的 RxJava Observable

我有一个启动三个片段的活动。第一个是加载启动画面,我只想在其中显示应用程序的名称几秒钟。第二个,在我目前的情况下,是一个收集用户名和语言的屏幕。第三个片段将收集他们想学习的语言。我试图在我的 ViewModel 中使用 Observable 来保存我的数据,但是在第一个片段中输入的信息在切换到第二个片段时会丢失。

我想我同时遇到了两个(或更多)问题:

  1. 我认为我没有跨片段正确共享我的 runOnceViewModel
  2. 我不认为我使用 Observables 很正确。

从初始屏幕检查权限后,我触发一个函数(launchProfile),它加载下一个片段,如下所示:

由于这是一个新用户,主键将为 0,因此我加载了 runOnceNameAndNativeLangFragment:

如果我在“runOnceSelectTargetLangsFragment fragment = new runOnceSelectTargetLangsFragment();”上设置断点 然后我可以验证 model.getNewUser() 返回一个 Observable,其中包含我在 UI 上输入的任何内容的名称和母语。让我感到沮丧的是,一旦我加载下一个片段(runOnceSelectTargetLangsFragment),并尝试将目标语言保存在其点击处理程序中,名称和本地语言信息就会丢失。唉,我没有正确共享视图模型(或者,更糟糕的是,我在不应该使用的时候使用了 Observable——旁注:我选择使用 Observable 是因为它使处理线程的东西变得相当容易,而且我想随着应用程序变得越来越复杂,我会欣赏它的灵活性。至少,我是这么告诉自己的。)

选择目标片段

在客栈,model.getNewUser() 返回一个 Observable,目标语言都设置好了,但是名字和母语信息都没有了。

查看模型

0 投票
1 回答
49 浏览

java - 是否在所有事件或每个事件之后通知订阅者?

我是 RxJava 的新手,我的印象是每个事件都会通知每个订阅者。因此,如果我们有 N 个订阅者和一个 X 事件流,则将onNext为 N 个订阅者中的每一个调用。但是当我运行以下代码时:

我懂了:

所以基本上在所有onNext完成之后才会触发下一个观察者。

我期待看到:

在我看来,这对于很长的流来说效率很低,我做错了什么吗?

0 投票
1 回答
870 浏览

android - com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 148 列路径 $.main 处为 BEGIN_OBJECT

我有问题,真的不知道如何解决这个问题。我尝试了几天找到类似的帖子,但没有找到。

我使用改造来解析api并将其放入房间数据库并使用rxjava3,因为它将是异步的

我的 JSON

API服务

我的应用模块

我的回复

我的 Main 类型转换器,我把它放在数据库中

0 投票
2 回答
104 浏览

java - 传递覆盖 onSubscribe 的订阅者时调用 dispose()

我是 RxJava 的新手,如果我理解正确,Observer那么Disposable它可以在已经调用onSubscribe的情况下手动停止处理。 我创建了以下代码:dispose()

但我不知道如何调用dispose()该订阅。作为参数subscribe传递返回并且不接受 my没有编译错误。ObservervoidsubscribeWithObserver

这应该如何工作?我在这里有什么误解?

0 投票
1 回答
65 浏览

java - switchMapSingle() 不会取消先前的请求

我有 6000 行的数据库表“订单”,我想使用 switchmap 按数字在其中创建搜索以取消先前的请求。但它不起作用,它总是返回先前请求的结果。我的代码有什么问题?

示例:输入 1..0..7 返回 107%,然后是 10%,然后是 1%。它应该只返回 107%

UPD:添加了获取 OrderParameter