我从数据库中获取页面数据,我有一个返回流的存储库.

class RepositoryImpl (private val db: AppDatabase) : Repository {

    override fun fetchData (page: Int) = flow {
        emit(db.getData(page))
    }
}

在ViewModel中,我调用stateIn(),第一个页面到达,但是如何请求第二个页面呢?通过调用fetchData(第2页),我得到了一个新的流,我需要数据到达旧的流.

class ViewModel(private val repository: Repository) : ViewModel() {

    val dataFlow = repository.fetchData(page = 1).stateIn(viewModelScope, WhileSubscribed())
}

如何获取数据流中的第二页?

推荐答案

如果您只发出一个值,我看不出在存储库中使用流的原因.我将其更改为suspend函数,在ViewModel中,我将用新值更新MutableStateFlow类型的变量.示例代码可能如下所示:

class RepositoryImpl (private val db: AppDatabase) : Repository {

    override suspend fun fetchData (page: Int): List<Data> {
        return db.getData(page)
    }
}

class ViewModel(private val repository: Repository) : ViewModel() {

    val _dataFlow = MutableStateFlow<List<Data>>(emptyList())
    val dataFlow = _dataFlow.asStateFlow()

    fun fetchData (page: Int): List<Data> {
        viewModelScope.launch {
            _dataFlow.value = repository.fetchData(page) 
        }
    }    
}

Android相关问答推荐

在Android Studio Iguana 2023.2.1中,哪里可以找到能量分析器?

Jetpack编写使用自定义主题覆盖库中主题部分

为什么当我在装有Firebase的安卓系统中登录苹果时,收到的邮箱为空?

Jetpack创作动画断断续续变化的观点

react 本机生成失败,出现异常.错误:无法确定';<;宏/>;的类型

在柯特林连续测量网速

FireBase Android ChildEventListener在被规则拒绝时触发(RTDB)

jetpackcompose-如何对解析后的复杂对象进行状态提升?

如何正确创建可拖动的浮动视图?

面向Jetpack Compose的可组合放置问题

安卓模拟器打不开

如何在 React Native 下载文件之前打开文件管理器并 Select 一个目录

Android工作室未成立

在 Jetpack Compose 中使用 .observeAsState() 时,如何在更改 MutableLiveData 的值后开始执行一段代码?

您如何衡量条形图的 4 个类别?

将房间中的实体更新为 isCompleted 并使用 Flow 问题获取所有数据

Android 12 通过包管理器中断 APK 安装?

禁用通知权限后启动前台服务导致崩溃(Android 13)

无法再查看 Jetpack Compose 预览.无法实例化一个或多个类 (ComposeViewAdapter)

如何使 BasicTextField 上的光标以 jetpack compose 为中心?