问题标签 [kotlin-stateflow]
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.
kotlin - 尝试响应通过 StateFlow 传递的 ApplicationCall 对象后收到 ResponseAlreadySentException
我正在 KTOR 中测试一个事件驱动的架构。我的核心逻辑保存在一个类中,该类对 StateFlow 发出的不同事件类型作出反应。EventGenerators 将事件推送到由 Core 拾取的 StateFlow 中。
但是,当核心尝试响应ApplicationCall
嵌入在我的一个事件中的事件时,我会收到一个ResponseAlreadySentException
,但我不确定为什么会这样。如果我绕过 StateFlow 并直接从 EventGenerator 调用 Core 类,则不会发生这种情况。我在代码中的其他任何地方都没有响应 ApplicationCalls,并且已经用断点检查了唯一的.respond
行没有被多次命中。
MyStateFlow 类:
我的核心课程:
我的 EventGenerator 之一是我的 KTOR 应用程序类中的路由:
但是,/f00
在我的浏览器中点击会返回一条ResponseAlreadySentException
或一条java.lang.UnsupportedOperationException
带有消息:“无法再设置标题,因为响应已经完成”。当我在尝试不同的解决方案时,错误响应可以在两者之间切换,但它们似乎在说同样的事情:在我尝试调用之前,调用已经得到响应call.respond(...)
。
如果我改变我的路线而不是直接调用Core.onEvent()
,点击/foo
在我的浏览器中返回“栏”,这是预期的行为:
为了完整起见,我的依赖版本是:
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10"
implementation "io.ktor:ktor-server-netty:1.4.1"
提前感谢您提供的任何见解。
android - 填充并发出 StateFlow 列表
我想使用 StateFlow。但是现在,我找不到任何可以帮助我的讲座。
我面临一个问题:首先,我有一个包含字符串列表的单例,我想要一些“容易”理解的东西,即使它不是现在的目标。目的是用字符串填充和发出列表(稍后它将是一个复杂的对象)。
这似乎可行,但我不喜欢临时列表......没有,我无法在我的片段中触发自定义的“收集”。
有没有办法在不使用 tempList 的情况下实现这一点?
谢谢
android - 当新值与上一个值相同时,StateFlow 不会发出
我有一个登录表单。我StateFlow
用来发送LoginResult
(调用 API 后)从ViewModel
到Activity
. 在活动中,如果登录失败,我将显示一个错误对话框。
它第一次运行良好,但从我第二次登录失败后,错误对话框将不再显示。我都测试.value
过.emit
StateFlow
android - 找不到接受参数类型 'kotlinx.coroutines.flow.MutableStateFlow' DataBinding Android 的设置器
我在 ViewModel 中使用数据绑定来处理 MutableStateFlow
这是我在 XML 文件中的用法
这是我的 BindingAdapter
它给了我这个错误
找不到接受参数类型“kotlinx.coroutines.flow.MutableStateFlow”的设置器
但是当我使用 LiveData 时它工作正常!
android - StateFlow 汇集在一个协程中
我在一个协程中尝试了 init 三个集合,但只工作了第一个。只有当我设置在不同的协程中收集它的工作时。为什么?
android - 在 Kotlin 的 Stateflow 上使用 map
在 Viewmodel 中使用 LiveData,我们像这样使用 switchMap 或 Transformations.map
使用 StateFlow 执行此操作的最佳方法是什么?我知道我们可以像下面这样使用地图,但是这会返回我 Flow<Flow<List< Recipe>>> 这似乎不正确
kotlin - LiveData 转换为 StateFlow / SharedFlow
StateFlow / SharedFlow 中这种实时数据转换的等效代码是什么?
基本上,我想听每个查询更改以响应返回的内容。所以,任何类似于使用 StateFlow / SharedFlow 的东西都是受欢迎的。
android - Android - 如何从 kotlin 流中读取值?
我有来自房间数据库的情节流。我可以毫无问题地观察这个流的实时数据。
但我也想在用户单击按钮时从该流程中读取最后一个值。我尝试使用 first() 终端流运算符,但它无法编译。你能帮忙或建议别的吗?
从流中读取的非编译尝试:
此流程来自 ROOM :
存储库:
查看模型 - Id 来自 StateFlow :
编译错误:
作为一种“解决方法”,我将这一集保存在这样的实例变量中,但如果可能的话,我想避免这样做:
=================== 更新/解决方案 21/01/15 ==================
使用 stateIn 受 beigirad 启发的解决方案(请参阅下面的帖子):
android - 如何在存储库级别发出多个流值作为对象?
假设我有两个流程:
我可以有第三个流,z
将这两个作为一对发射的流吗?
假设我有XYObject()
XYObject 的样子
我想基本上发出一个流z
,它XYObject
在上面的两个流中填充 X 和 Y 。我实际上有 3-4 个我想发出的东西,但为了示例,将其保留为 2 个。
android - 使用turtle测试协程StateFlow的更好方法是什么
我正在寻找一种更好的方法来测试协程。目前,我正在使用Turbine作为测试助手。但是,我在改善超时问题时遇到了一些困难。
前任:
上面的代码有TimeoutCancellationException。
通过解决上述问题,我在测试中移动了类初始化。
在测试中移动初始化后,测试通过但我正在寻找一种改进它的方法。