问题标签 [kotlinx.coroutines.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 投票
3 回答
18244 浏览

android - 如何将项目发送到 Kotlin.Flow(如 Behaviorsubject)

我想知道如何向 a 发送/发送项目Kotlin.Flow,所以我的用例是:

在 consumer/ViewModel/Presenter 中,我可以使用以下功能订阅collect

但问题在于Repository,使用 RxJava,我们可以使用Behaviorsubject将其公开为 anObservable/Flowable并发出如下新项目:

但是每当我建立一个新流程时:

我只能收集。如何将值发送到流?

0 投票
0 回答
209 浏览

kotlin - 流 - 在没有多次迭代的情况下克隆流 - 我做得对吗?

我刚刚开始熟悉 Kotlin 流程。

为此,我使用它们来解析二进制文件的内容,我将使用以下流程进行模拟:

现在,我基本上需要多次文件内容来提取不同的信息集。但是,我不想读取文件两次,而只想读取一次。

由于似乎没有克隆/复制流程的内置机制,我开发了以下辅助函数:

然后我像这样使用它(考虑与文件的类比:flowa获取每条记录,b仅流动前 3 条记录(=“file header”)并c在 header 之后流动所有内容):

输出:

到目前为止看起来不错。但是,我不确定在这方面我是否正确使用了 Kotlin 的流程。
我是否为死锁、错过的异常等敞开心扉?

文档只是说明

Flow 接口的所有实现都必须遵守下面详细描述的两个关键属性:

  • 上下文保存。
  • 异常透明度。

但我不确定我的实施是否属于这种情况,或者我是否遗漏了什么。
或者也许有更好的方法?

0 投票
3 回答
3486 浏览

android - 使用 Kotlin Coroutines 和 Flow 测试 Room DAO 的方法

我正在尝试在我的 Room Dao 中从 LiveData 迁移到 Flow。应用程序运行良好,但我在测试行为方面遇到问题。当我运行测试时,它正在无限期地启动和运行。我也尝试使用kotlinx.coroutines.test runBlockingTest,但我遇到了“这项工作还没有完成”的问题,就像这里一样。有人可以指出正确的方向如何测试我的 CoresDao 的行为吗?

0 投票
3 回答
8984 浏览

android - Kotlin Flow 与 LiveData

在上一次 Google I/O 中,Jose Alcerreca 和 Yigit Boyar告诉我们,我们不应该再使用 LiveData 来获取数据。现在我们应该使用暂停函数进行一次性获取,并使用 Kotlin 的 Flow 创建数据流。我同意协程非常适合一次性获取或其他 CRUD 操作,例如插入等。但是在我需要数据流的情况下,我不明白 Flow 给了我什么优势。在我看来,LiveData 也在做同样的事情。

流示例:

视图模型

存储库

LiveData 示例:

视图模型

存储库

我还希望看到一些使用协程和 Flow 来配合 Room 或 Retrofit 的项目示例。我只发现了一个 Google 的ToDo 示例,其中协程用于一次性获取,然后在更改时手动重新获取数据。

0 投票
1 回答
6766 浏览

kotlin-coroutines - 如何过滤 Kotlin Flow 中的列表

我正在使用RxJavatoCoroutines和替换我当前的实现Flow。我在使用某些Flow运算符时遇到了一些麻烦。

我正在尝试Flow在提供要收集的内容之前过滤 a 中的项目列表。( Flow<List<TaskWithCategory>>)

这是关于Rx2

在上面的实现中,我提供了一个已经完成的TaskWithCategory过滤列表。Task

我怎样才能做到这一点Flow

0 投票
3 回答
9289 浏览

android - 如何取消/取消订阅协程流程

当我试图从流中过早取消时,我注意到一个奇怪的行为。看看下面的例子。

这是一个发出整数值的简单流程

然后我createFlow使用这段代码调用函数

这是打印出来的

现在我希望流一旦达到 2 的值就应该停止发射整数,但实际上它会将 isActive 标志切换为 false 并继续发射而不会停止。

当我在排放之间添加延迟时,流程的行为与我预期的一样。

这是再次调用流程后打印的内容(这是预期的行为)。

如何在不增加延迟的情况下完全取消指定值的流量发射?

0 投票
2 回答
6448 浏览

android - 挂起函数只能在协程体内调用

我正在尝试使用 Kotlin Flows 和 Firebase 为我的视图提供实时更新。

这就是我从以下位置收集实时数据的方式ViewModel

这就是每当 Firebase 中的值发生变化时,我如何从我的存储库中发出每个数据流:

问题是当我使用时:

Android Studio 使用以下命令突出显示发出调用:

挂起函数 'emit' 只能从协程或另一个挂起函数中调用

但我从CoroutineScope我的ViewModel.

这里有什么问题?

谢谢

0 投票
1 回答
630 浏览

android - 如何从 kotlin 协程中的函数返回 fusedLocationProviderClient().lastLocation 作为流

我在做什么

因此,我正在开发一个天气预报应用程序,在该应用程序中我使用 fusedLocationProviderClient.lastLocation 访问设备位置,我们大多数人都知道位置提供程序返回一个任务,因此我正在使用延迟协程,以便每当任务完成时它都会给出我是设备位置,请查看代码以便更好地理解

我的问题是什么

但是现在我希望我的位置是一个实时位置,因此我必须使用协程流,这样每当我的位置发生变化时,我就可以自动获取新位置的天气,但是因为我是 kotlin 协程的新手我不知道如何实现这一点以及我如何能够使用延迟的流,

任何人都可以请帮助我,或者如果这不可行,请建议我做一些其他的工作来实现我的目标提前谢谢

0 投票
2 回答
612 浏览

android - SharedFlow:mapLatest 没有被触发

让我们把它简单化。我MutableSharedFlowsortOrder我的ViewModel.

每当更改时,我都会mapLatest连接到sortOrder刷新数据。sortOrder

我有一个观察者在听data活动。

最后,我改变了sortOrderinViewModelinit方法

但即使在更改sortOrder值之后,mapLatest也不会被触发。知道为什么吗?

MutableSharedFlow用来控制replay属性以防止mapLatest每次旋转屏幕(或重新创建活动时)时执行主体。

完整的源代码

PS:我是 Flow API 的新手

0 投票
2 回答
4341 浏览

android - 如何用 Flow 替换 LiveData

我有一个LiveData命名sortOrder,然后我有另一个命名的变量myData,它观察任何变化sortOrder并相应地填充数据。

在活动中观察

问题

  • 如何在Flow/StateFlow不改变输出的情况下用 API 替换上述场景?