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

0 投票
1 回答
686 浏览

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).

0 投票
1 回答
2029 浏览

kotlin - 将回调流转换为共享流

我刚开始使用协程/流(以及一般的 kotlin),我正在努力将回调流转换为共享流。

我将下面的简单示例放在一起只是为了展示我尝试过的内容,但没有成功。我的代码更复杂,但我相信这个例子反映了我想要实现的问题。

这个想法是fetchSomethingContinuously只调用一次,与 sharedFlow 的收集器数量无关。但正如您从输出中看到的那样,收集器永远不会获取值:

我查看了shareIn运算符,但不确定如何准确使用它。

我怎么能做到这样的事情?任何提示将不胜感激。

0 投票
2 回答
5152 浏览

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 的理解,或者我的设置是否在某些方面不正确,但我希望能在这个问题上提供一些帮助。

0 投票
1 回答
387 浏览

android - Android - 使用 Flow 创建回调

我正在尝试理解 Flow,但对我来说几乎没有什么不清楚的。我有一个简单的界面:

然后我有一个具有功能的管理器类:

假设我有一个非常简单的操作 - 尝试使用 gson 将对象序列化为 JSON:

请您解释一下,如何观察异常(或 T 值)并在 Activity/Fragment 中发送/接收它?

0 投票
0 回答
151 浏览

android - 在某个返回值上停止 Kotlin 流

我是 Kotlin Flow 的新手。我想一个一个地执行一些功能,如果有任何错误就停止执行。我为此使用以下代码:

虽然 test2() 返回 999 错误代码,但执行并没有停止,它还执行了 test3()。这段代码有什么问题?如何解决?

0 投票
1 回答
1769 浏览

kotlin - 如何抑制协程流程中的错误,使流程无法完成?

我有一个流程可能会引发如下错误:

我的问题是,即使我添加了.catch { error -> emit("5") }.. 也会引发错误,它仍然会完成流程,因此不会"6"发出。

结果是:

我需要它是:

我想吞下错误而不是完成流程。我怎样才能做到这一点?

0 投票
1 回答
1764 浏览

kotlin - 如何使用 Ktor 和 Kotlin 下载带有进度指示器的大文件?

我花了太多时间试图解决这个问题。因此,我在下面发布的代码在下载文件方面确实有效,但问题是,流程具有非常意外的行为。方法调用似乎会阻塞,response.content.readAvailable()直到它完全完成下载整个文件,此时会发生发射进度,因此您最终要等待很长时间才能下载文件,然后在一瞬间您会获得所有进度更新。所以我想知道是否有办法做到这一点,我一次读取一定数量的字节,然后发出一个进度,然后重复直到文件完成下载?或者可能是一种挂钩 readAvailable() 方法并以这种方式更新进度的方法?对此的任何帮助将不胜感激。

这是我找到并修改的代码,但仍然无法正常工作:

0 投票
2 回答
1312 浏览

android - 试图将 SavedStateHandle.getLiveData() 公开为 MutableStateFlow,但 UI 线程冻结

我正在尝试使用以下代码:

我正在尝试像这样使用它:

UI 线程冻结。我有一种感觉,因为collect()我试图创建一个由封闭协程上下文管理的内部订阅,但我还需要将此 StateFlow 作为一个字段。还有值的交叉写入(如果其中一个发生更改,如果它是新值,则更新另一个)。

总的来说,这个问题似乎collect()是暂停的,因为我在getStateFlow().

有谁知道创建流的“内部订阅”的好方法,而不会最终冻结周围的线程?需要,runBlocking {以便我可以将值同步分配给 ViewModel 构造函数中的字段。(这甚至可能在“结构化并发”的范围内吗?)

0 投票
3 回答
860 浏览

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

不知道如何正确处理。任何帮助将不胜感激!

0 投票
2 回答
653 浏览

android - Kotlin 多平台移动:Flow> 映射到 Flow在 iOS 中

我的共享模块包含 Repository 类,该类具有两个函数,它们返回包装在Flow名为 CFlow 的自定义类中的项目列表。

CFlowkotlinconf-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

截图1

截图2