问题标签 [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.
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 中,但这导致我来到这里。
问题
我对访问存储库的位置和处理 Spinner 的初始化的选择对于 MVVM 模式是否合理?我想确保我正在使用框架,而不是反对它,但我不知道我在做什么,并且使用 RxJava,感觉很好。我在想,如果我对如何更好地组织我的代码有一些指导,那么也许它会让我避免尝试做一些愚蠢的事情。
我什至应该尝试让“中级”“language.java”类工作,还是完全放弃它?换句话说,我是否应该不担心将 RxJava 转换为 LiveData 可能有什么优势(或者我认为我理解的优势)?似乎我误解了什么,混淆了我的代码,让我的生活变得比需要的更艰难。
我应该怎么做?
我应该在我的 subscribeToModel 中做什么?我读过应该为服务保留业务逻辑。所以,到目前为止,在我看来,存储库应该负责将事物传递给计算,但我对如何对“填充”逻辑进行分类有点模糊,因此对对片段进行任何形式的操作犹豫不决等级。然而,这让我想知道“好吧,那应该去那里做什么??”
非常感谢您对此提出的任何建议。
android - RxJava takeWhile 似乎被忽略了。应该只在第一页执行
我正在尝试使用 workmanager 批量上传数据库实体。工作正常,但是进行分页的服务没有按预期工作。
我想做的事:
- 对我需要上传的数据库条目进行分页(服务器上的最后一个时间戳比客户端上的更新)。获取页面作为
List
- 将条目映射到 api 对象
- 将实体传递给另一个触发 API 调用的方法,发送条目列表
问题:
- 分页似乎忽略了
takeWhile
运算符并执行,直到达到最大执行限制 uploadEntitiesFor
调用永远不会执行
接口:
页面供应商来自Room Dao,例如(它是一个内部应用程序,我需要存储每个用户的东西......):
执行期间,日志输出:
我现在只有一个合作伙伴要上传。不会触发上传,并且分页仍然执行,直到达到限制并且在第一页之后不会停止。
android - RxJava:如果返回 Single 的函数抛出异常,如何捕获错误?
我在下面有这个功能:
userRepository.getUser()
返回Single<User>
我在下面有一个单元测试:
我希望能够捕获.doOnError
块内的异常,但它不起作用。
我在这里做错了什么?
谢谢
kotlin - Kotlin Flow 中的 RxJava BehaviorSubject#onError(Throwable) 等效项
我在一个项目中将一些 RxJava 代码转换为 Kotlin Flow。
我遇到了一段BehaviorSubject#onError(Throwable)
被调用的代码。
我没有找到任何方法来处理Flow
对象。
有什么办法吗?
java - 当 minifyEnabled 设置为 true 时,Rxjava3 无法按预期工作
当我将 build.gradle 中的 minifyEnabled 设置为 true 时,当我正确浏览日志和 API 响应时,似乎 rxjava3 突然无法按预期工作。
所以我要做的是创建一个空的新项目。
导入 Rxjava3 (3.0.13):
implementation "io.reactivex.rxjava3:rxjava:3.0.13"
将 buildTypes 更改为:
- 将 MainActivity.java 的 onCreate 函数更改为:
- 在 onSuccess 中设置断点,然后连接设备并按调试。
- 在 onSuccess 中,您将得到 null 而不是“Test”。
如果将调试的 minifyEnabled 切换回 false,它将按预期工作。我还在 proguard-rules.pre 文件中添加了这些行:
那没起效。
有人可以告诉我从这里走的路吗?先感谢您。
android - 使用共享 ViewModel 跨片段的 RxJava Observable
我有一个启动三个片段的活动。第一个是加载启动画面,我只想在其中显示应用程序的名称几秒钟。第二个,在我目前的情况下,是一个收集用户名和语言的屏幕。第三个片段将收集他们想学习的语言。我试图在我的 ViewModel 中使用 Observable 来保存我的数据,但是在第一个片段中输入的信息在切换到第二个片段时会丢失。
我想我同时遇到了两个(或更多)问题:
- 我认为我没有跨片段正确共享我的 runOnceViewModel
- 我不认为我使用 Observables 很正确。
从初始屏幕检查权限后,我触发一个函数(launchProfile),它加载下一个片段,如下所示:
由于这是一个新用户,主键将为 0,因此我加载了 runOnceNameAndNativeLangFragment:
如果我在“runOnceSelectTargetLangsFragment fragment = new runOnceSelectTargetLangsFragment();”上设置断点 然后我可以验证 model.getNewUser() 返回一个 Observable,其中包含我在 UI 上输入的任何内容的名称和母语。让我感到沮丧的是,一旦我加载下一个片段(runOnceSelectTargetLangsFragment),并尝试将目标语言保存在其点击处理程序中,名称和本地语言信息就会丢失。唉,我没有正确共享视图模型(或者,更糟糕的是,我在不应该使用的时候使用了 Observable——旁注:我选择使用 Observable 是因为它使处理线程的东西变得相当容易,而且我想随着应用程序变得越来越复杂,我会欣赏它的灵活性。至少,我是这么告诉自己的。)
选择目标片段
在客栈,model.getNewUser() 返回一个 Observable,目标语言都设置好了,但是名字和母语信息都没有了。
查看模型
java - 是否在所有事件或每个事件之后通知订阅者?
我是 RxJava 的新手,我的印象是每个事件都会通知每个订阅者。因此,如果我们有 N 个订阅者和一个 X 事件流,则将onNext
为 N 个订阅者中的每一个调用。但是当我运行以下代码时:
我懂了:
所以基本上在所有onNext
完成之后才会触发下一个观察者。
我期待看到:
在我看来,这对于很长的流来说效率很低,我做错了什么吗?
android - com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 148 列路径 $.main 处为 BEGIN_OBJECT
我有问题,真的不知道如何解决这个问题。我尝试了几天找到类似的帖子,但没有找到。
我使用改造来解析api并将其放入房间数据库并使用rxjava3,因为它将是异步的
我的 JSON
API服务
我的应用模块
我的回复
我的 Main 类型转换器,我把它放在数据库中
java - 传递覆盖 onSubscribe 的订阅者时调用 dispose()
我是 RxJava 的新手,如果我理解正确,Observer
那么Disposable
它可以在已经调用onSubscribe
的情况下手动停止处理。
我创建了以下代码:dispose()
但我不知道如何调用dispose()
该订阅。作为参数subscribe
传递返回并且不接受 my没有编译错误。Observer
void
subscribeWith
Observer
这应该如何工作?我在这里有什么误解?
java - switchMapSingle() 不会取消先前的请求
我有 6000 行的数据库表“订单”,我想使用 switchmap 按数字在其中创建搜索以取消先前的请求。但它不起作用,它总是返回先前请求的结果。我的代码有什么问题?
示例:输入 1..0..7 返回 107%,然后是 10%,然后是 1%。它应该只返回 107%
UPD:添加了获取 OrderParameter