问题标签 [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.

0 投票
0 回答
161 浏览

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"

提前感谢您提供的任何见解。

0 投票
1 回答
1399 浏览

android - 填充并发出 StateFlow 列表

我想使用 StateFlow。但是现在,我找不到任何可以帮助我的讲座。

我面临一个问题:首先,我有一个包含字符串列表的单例,我想要一些“容易”理解的东西,即使它不是现在的目标。目的是用字符串填充和发出列表(稍后它将是一个复杂的对象)。

这似乎可行,但我不喜欢临时列表......没有,我无法在我的片段中触发自定义的“收集”。

有没有办法在不使用 tempList 的情况下实现这一点?

谢谢

0 投票
2 回答
1625 浏览

android - 当新值与上一个值相同时,StateFlow 不会发出

我有一个登录表单。我StateFlow用来发送LoginResult(调用 API 后)从ViewModelActivity. 在活动中,如果登录失败,我将显示一个错误对话框。
它第一次运行良好,但从我第二次登录失败后,错误对话框将不再显示。我都测试.value.emitStateFlow

0 投票
1 回答
1136 浏览

android - 找不到接受参数类型 'kotlinx.coroutines.flow.MutableStateFlow' DataBinding Android 的设置器

我在 ViewModel 中使用数据绑定来处理 MutableStateFlow

这是我在 XML 文件中的用法

这是我的 BindingAdapter

它给了我这个错误

找不到接受参数类型“kotlinx.coroutines.flow.MutableStateFlow”的设置器

但是当我使用 LiveData 时它工作正常!

0 投票
1 回答
795 浏览

android - StateFlow 汇集在一个协程中

我在一个协程中尝试了 init 三个集合,但只工作了第一个。只有当我设置在不同的协程中收集它的工作时。为什么?

0 投票
1 回答
2301 浏览

android - 在 Kotlin 的 Stateflow 上使用 map

在 Viewmodel 中使用 LiveData,我们像这样使用 switchMap 或 Transformations.map

使用 StateFlow 执行此操作的最佳方法是什么?我知道我们可以像下面这样使用地图,但是这会返回我 Flow<Flow<List< Recipe>>> 这似乎不正确

0 投票
2 回答
1169 浏览

kotlin - LiveData 转换为 StateFlow / SharedFlow

StateFlow / SharedFlow 中这种实时数据转换的等效代码是什么?

基本上,我想听每个查询更改以响应返回的内容。所以,任何类似于使用 StateFlow / SharedFlow 的东西都是受欢迎的。

0 投票
2 回答
2702 浏览

android - Android - 如何从 kotlin 流中读取值?

我有来自房间数据库的情节流。我可以毫无问题地观察这个流的实时数据。

但我也想在用户单击按钮时从该流程中读取最后一个值。我尝试使用 first() 终端流运算符,但它无法编译。你能帮忙或建议别的吗?

从流中读取的非编译尝试:

此流程来自 ROOM :

存储库:

查看模型 - Id 来自 StateFlow :

编译错误:

作为一种“解决方法”,我将这一集保存在这样的实例变量中,但如果可能的话,我想避免这样做:

=================== 更新/解决方案 21/01/15 ==================

使用 stateIn 受 beigirad 启发的解决方案(请参阅下面的帖子):

0 投票
1 回答
666 浏览

android - 如何在存储库级别发出多个流值作为对象?

假设我有两个流程:

我可以有第三个流,z将这两个作为一对发射的流吗?

假设我有XYObject()XYObject 的样子

我想基本上发出一个流z,它XYObject在上面的两个流中填充 X 和 Y 。我实际上有 3-4 个我想发出的东西,但为了示例,将其保留为 2 个。

0 投票
0 回答
650 浏览

android - 使用turtle测试协程StateFlow的更好方法是什么

我正在寻找一种更好的方法来测试协程。目前,我正在使用Turbine作为测试助手。但是,我在改善超时问题时遇到了一些困难。

前任:

上面的代码有TimeoutCancellationException

通过解决上述问题,我在测试中移动了类初始化。

在测试中移动初始化后,测试通过但我正在寻找一种改进它的方法。