问题标签 [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 投票
1 回答
85 浏览

android - flowWithLifecycle(lifecycle, Lifecycle.State.STARTED) 在 App 在后台时不会停止流

我正在尝试观察View Collection 和上游流停止的结果。但viewModel.testFlow在应用程序处于后台时仍在收集。为什么我无法观察到收集已停止?我观察到什么不对吗?

视图模型:

活动:

日志 生命周期图

https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda

0 投票
1 回答
72 浏览

android - 从 viewmodel 调用方法时应用程序崩溃

我正在尝试使用改造向远程服务器发出请求。我正在使用干净的架构来分离关注点。从顶级文件

改造电话

专用旅行Dto

数据

这是我的用例

资源

在视图模型方面

在视图端这里是如何调用视图模型代码

当我调用该函数时,应用程序崩溃,而 logcat 中没有显示任何错误。

json文件

0 投票
4 回答
256 浏览

kotlin - Kotlin Coroutine/Flow Timeout 不取消正在运行的协程?

我正在尝试创建一个在超时后发出值的流,而不取消底层协程。这个想法是网络调用有 X 时间来完成并发出一个值,并且在达到超时之后,发出一些初始值而不取消底层工作(最终从网络调用发出值,假设它成功)。

像这样的东西似乎可以工作,但是当达到超时时它会取消底层协程。它也不处理在超时时发出一些默认值。

我希望能够在任何时候发出网络调用返回的值,如果达到超时,只需发出一些默认值。我将如何使用 Flow/Coroutines 完成此任务?

0 投票
1 回答
129 浏览

android - stateflow 在 reyclerview android kotlin 中引用整个数据

嘿,我正在学习android kotlin 中的状态流我正在reyclerview的帮助下创建反向对话日历视图。在我mainactivity里面有一个fragment,在里面我有reyclerview。我的目标是在我的recyclerview中进行分页,所以我首先加载几个月,而不是在这个答案的帮助下在我的 reyclerview 中添加越来越多的数据。我成功地实现了它。但问题是当我达到阈值并触发新数据时。我的整个列表被引用并且它没有被更新它删除了以前的数据。我不明白为什么会在MutableStateFlow中发生这种情况,而且我是这个流程的新手. 我的Github项目链接在这里。请指导我在这里做错了什么。我的目标是预先添加 stateFlow 数据。谢谢

对话片段.kt

片段视图模型.kt

我的模拟 api 响应链接

问题描述

加载应用程序时,将出现片段屏幕并在其上显示一些日期。我将startDate设置为2021-12-01并将endDate设置为今天的日期,即2022-01-13。因此,当开始滚动并达到加载更多数据的阈值时。我通过了startDate作为2021-11-01endDate作为2021-11-30。它已添加到列表中,但之前的数据已被删除。我不明白为什么会这样。我附上我的 YouTube链接

0 投票
2 回答
111 浏览

kotlin - 将两个 kotlin 流组合成一个流,从两个原始流中发出最新值?

如果我们有两个这样定义的流:

另一个流程定义如下:

是否可以将两个流组合成一个流,该流仅发出由someflow或发出的最后一个值stateFlow

这个想法stateFlow可能会在未来的某个时候发出一个值,但在那之前我只想要someflow最后发出的任何值。在“组合”流程中,我只想获取由 发出的第一个值,someflow然后能够观察stateFlow.

似乎这可以通过组合函数来完成,但我只想在两个流之间发出最新发出的值,我不在乎一个流的最后一个值是什么。

0 投票
1 回答
101 浏览

android - 将 PagingData 流映射到另一个模型

我创建了一个用于学习的图库应用程序。图片是从不同的来源获取的,如 Pixabay、Unsplash、Imgur 等。我想将每个分页结果映射到我自己的名为 PhotoBO 的数据

我正在使用干净的架构,建议我更好的方法来处理

我想将所有寻呼响应映射PagingData<UnsplashPhoto>到我的PagingData<PhotoBo >

UnSplashPhotoUseCase.kt

UnSplashRepositoryImpl.kt

或者有没有更好的方法来处理网络和其他异常并将数据映射到我的类型

在 UnSplashRepositoryImpl.kt 我想返回Resource<Flow<PagingData<PhotoBO>>>

0 投票
1 回答
84 浏览

kotlin - 如何在kotlin中打印流的大小

嘿,我是 kotlin flow的新手。我正在尝试打印流量大小。众所周知,列表具有size()功能。我们是否有类似的功能flow

输出

我们如何在流量中获得大小值?

谢谢

0 投票
2 回答
298 浏览

android - 为什么在 kotlin 中流对方付费电话两次以上?

嘿,我正在 android 的 kotlin flow 中工作。我注意到我的 kotlin 流程collectLatest调用了两次,有时甚至更多。我尝试了这个答案,但它对我不起作用。我在我的collectLatest函数中打印了日志,它打印了日志。我正在添加代码

MainActivity.kt

活动视图模型.kt

我不明白为什么这是两次调用。我正在附加日志

如您所见,它调用了两次。但是我加载的数据比它调用的数据多两倍。我不明白为什么它不止一次调用。有人可以指导我做错了什么。如果您需要完整代码,我将添加我的项目链接

0 投票
1 回答
105 浏览

kotlin - 状态流 Android Kotlin

对于我知道这是错误的每一件事,我都有一个上帝视图模型,但我只是在尝试 Flow

我在视图模型中有这两个状态流变量

下面的函数从服务器获取数据并更新上面的状态流

我正在从不同的片段中收集这些状态流,除了一个片段之外,每件事都可以正常工作

这是代码

在创建方法中

我将两个收集的值传递给适配器(复古菜单和购物车中的项目)

第一次加载片段时一切正常

我已将菜添加到购物车功能,该功能会更新用户购物车的价值

最初也可以正常工作

我还有一个按钮来过滤菜单到蔬菜非蔬菜

当我为蔬菜或非蔬菜过滤菜时,然后将菜添加到购物车(仅更改 userCart 状态流),我收集这些状态流的地方被触发两次,因此将数据设置到适配器被调用两次

我做错了什么

0 投票
1 回答
55 浏览

android - MutableStateFlow 不适用于 MutableList

这是我尝试使用的 MutableStateFlow 值:

我需要在上面的 MutableList 上观察更改(在 add、removeAt 等方法之后),但无法实现。我的猜测是因为只有列表的元素而不是列表本身发生了变化,所以收集方法不会被触发。

如果可能的话,我怎样才能使用 StateFlow 来实现呢?如果没有,正确的方法是什么?

请注意,我需要 arrayListOf() 的初始值,所以 LiveData 对我来说可能还不够。