问题标签 [kotlin-flow]
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 - Testing Kotlin Flow.combine with unending flows
I have the following test
The assertion succeeds, however the test fails with the exception:
I know this is contrived, and we could easily make this pass by ensuring that source1
completes, but I'm wondering why it fails? Is runBlockingTest
the wrong approach for testing never-ending flows?
(This is with coroutines 1.4.0
).
kotlin - 将回调流转换为共享流
我刚开始使用协程/流(以及一般的 kotlin),我正在努力将回调流转换为共享流。
我将下面的简单示例放在一起只是为了展示我尝试过的内容,但没有成功。我的代码更复杂,但我相信这个例子反映了我想要实现的问题。
这个想法是fetchSomethingContinuously
只调用一次,与 sharedFlow 的收集器数量无关。但正如您从输出中看到的那样,收集器永远不会获取值:
我查看了shareIn运算符,但不确定如何准确使用它。
我怎么能做到这样的事情?任何提示将不胜感激。
android - 当从另一个 Fragment/ViewModel 执行插入时,从 Room 返回的 Kotlin Flow 不会更新
我有一个 Room 数据库,它返回一个对象流。当我将新项目插入数据库时,Flow 的收集功能仅在从相同的 Fragment/ViewModel 执行插入时触发。
我录制了一段展示该问题的快速视频:https ://www.youtube.com/watch?v=7HJkJ7M1WLg
这是我对相关文件的代码设置:
成就道.kt:
AppDB.kt:
成就存储库.kt:
HomeFragment.kt:
HomeViewModel.kt:
AddAchievementBottomSheet.kt:
添加AchievementBottomSheetViewModel.kt:
build.gradle(应用程序):
build.gradle(项目):
我不确定是否应该归咎于我对 Kotlin Flow 的理解,或者我的设置是否在某些方面不正确,但我希望能在这个问题上提供一些帮助。
android - Android - 使用 Flow 创建回调
我正在尝试理解 Flow,但对我来说几乎没有什么不清楚的。我有一个简单的界面:
然后我有一个具有功能的管理器类:
假设我有一个非常简单的操作 - 尝试使用 gson 将对象序列化为 JSON:
请您解释一下,如何观察异常(或 T 值)并在 Activity/Fragment 中发送/接收它?
android - 在某个返回值上停止 Kotlin 流
我是 Kotlin Flow 的新手。我想一个一个地执行一些功能,如果有任何错误就停止执行。我为此使用以下代码:
虽然 test2() 返回 999 错误代码,但执行并没有停止,它还执行了 test3()。这段代码有什么问题?如何解决?
kotlin - 如何抑制协程流程中的错误,使流程无法完成?
我有一个流程可能会引发如下错误:
我的问题是,即使我添加了.catch { error -> emit("5") }
.. 也会引发错误,它仍然会完成流程,因此不会"6"
发出。
结果是:
我需要它是:
我想吞下错误而不是完成流程。我怎样才能做到这一点?
kotlin - 如何使用 Ktor 和 Kotlin 下载带有进度指示器的大文件?
我花了太多时间试图解决这个问题。因此,我在下面发布的代码在下载文件方面确实有效,但问题是,流程具有非常意外的行为。方法调用似乎会阻塞,response.content.readAvailable()
直到它完全完成下载整个文件,此时会发生发射进度,因此您最终要等待很长时间才能下载文件,然后在一瞬间您会获得所有进度更新。所以我想知道是否有办法做到这一点,我一次读取一定数量的字节,然后发出一个进度,然后重复直到文件完成下载?或者可能是一种挂钩 readAvailable() 方法并以这种方式更新进度的方法?对此的任何帮助将不胜感激。
这是我找到并修改的代码,但仍然无法正常工作:
android - 试图将 SavedStateHandle.getLiveData() 公开为 MutableStateFlow,但 UI 线程冻结
我正在尝试使用以下代码:
我正在尝试像这样使用它:
UI 线程冻结。我有一种感觉,因为collect()
我试图创建一个由封闭协程上下文管理的内部订阅,但我还需要将此 StateFlow 作为一个字段。还有值的交叉写入(如果其中一个发生更改,如果它是新值,则更新另一个)。
总的来说,这个问题似乎collect()
是暂停的,因为我在getStateFlow()
.
有谁知道创建流的“内部订阅”的好方法,而不会最终冻结周围的线程?需要,runBlocking {
以便我可以将值同步分配给 ViewModel 构造函数中的字段。(这甚至可能在“结构化并发”的范围内吗?)
android - 如何对从 Paging 3 返回 PagingSource 的 Room Dao 查询进行单元测试
我的问题实际上很笼统。我想知道如何对从Paging 3返回PagingSource的Room Dao查询进行单元测试。
我有一个Room Dao查询:
我想知道如何对这个查询进行单元测试。
到目前为止我尝试过的(使用内存中的Room数据库进行测试):
然而,这并没有通过:
junit.framework.AssertionFailedError:预期:androidx.paging.PagingData@7d6c23a1 实际:androidx.paging.PagingData@321123d2
不知道如何正确处理。任何帮助将不胜感激!
android - Kotlin 多平台移动:Flow> 映射到 Flow在 iOS 中
我的共享模块包含 Repository 类,该类具有两个函数,它们返回包装在Flow
名为 CFlow 的自定义类中的项目列表。
我CFlow
从kotlinconf-app和这里获取了代码:
存储库示例函数:
当我尝试在 iOS swift 代码中调用此函数时,函数的返回类型被转换为CFlow<NSArray>
watch 函数,数组的类型为 Any。
这很奇怪,因为在kotlinconf-app和这里都保留了函数的返回类型,并且它们的代码库中不涉及强制转换。
问题:如何让 Xcode iOS 项目中知道 CFlow 的类型?
安卓工作室版本:4.1.1
Kotlin 语言和插件版本:1.4.21
Kotlin Multiplatform Mobile 插件版本:0.2.0
Xcode 版本:12.2