Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将pagingData 3流与另一个流相结合_Android_Kotlin_Kotlin Coroutines_Flow_Android Paging - Fatal编程技术网

Android 将pagingData 3流与另一个流相结合

Android 将pagingData 3流与另一个流相结合,android,kotlin,kotlin-coroutines,flow,android-paging,Android,Kotlin,Kotlin Coroutines,Flow,Android Paging,我有一个pagingData flow对象,我想将其与不同的融合位置流相结合,以便对pagingData列表的每个项目进行相应的处理 val point : Flow<Point> val pagingDate : Flow<PagingData> val点:流 val pagingDate:流量 我尝试使用combine和combineTransform,但它似乎不起作用,因为当更新应用程序崩溃并显示与pagingData 3相关的错误消息时,无法发出两次 jav

我有一个pagingData flow对象,我想将其与不同的融合位置流相结合,以便对pagingData列表的每个项目进行相应的处理

val point : Flow<Point> 
val pagingDate : Flow<PagingData>
val点:流
val pagingDate:流量
我尝试使用combine和combineTransform,但它似乎不起作用,因为当更新应用程序崩溃并显示与pagingData 3相关的错误消息时,无法发出两次

java.lang.IllegalStateException:尝试从 pageEventFlow,这是一个非法操作。你忘了打电话了吗 Flow.cachedIn(协同视野)


我在这里有哪些选项可以使用流数据转换分页数据项?

请继续,因为其他人可能会遇到此问题,尽管OP尚未更新他们的答案


这通常是由于使用了
.combine
或类似的运算符,这些运算符将重复流中最新发出的值,从而导致同一实例被使用两次。为了防止出现这种情况,您可以在
.combine()
之前调用
.cachedIn(scope)
,以便流是多播的,从而为您提供一个预加载缓存数据的分页数据的新实例。

您可以分享.combine和整个操作符链对
流的用法吗?非常感谢!对于那些好奇的人来说,两次调用
cachedIn(scope)
似乎也是可以接受的。因此,这段代码工作得非常好:-
pagedFlow=repository.getPagedData().cachedIn(scope).combine(otherFlow){//Your UI transformations here}.cachedIn(scope)
如果您的转换很简单,您可能需要注意正在缓冲的项的数量,或者至少创建一个较小的范围来缓存它们,而不是viewModelScope。。。根据您期望触发的次数,
.combine()
是的,我为此尝试了不同的解决方案,但不幸的是,我的转换并不简单(转换为UI模型并添加分隔符)。
.combine()
中使用的另一个流在分页期间不会更改,它只能在用户修改应用程序其他部分的条目时更改。因此,
combine()。不过,我会看看是否可以尝试使用其他缓存范围。另外,对于应用程序性能,我注意到在转换后调用
cachedIn()
会产生显著的积极影响。加载的项目相对较轻(基本数据类,无图像),但项目数量可能非常大。