首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从房间数据库收集流程2次

从房间数据库收集流程2次
EN

Stack Overflow用户
提问于 2022-10-14 08:47:51
回答 1查看 44关注 0票数 0

我有问题收集歌曲从我的数据库。

宋道:

代码语言:javascript
复制
   @Query("SELECT * FROM song_table")
    fun observeSongs() : Flow<List<DatabaseSongListItem>>

储存库:

代码语言:javascript
复制
fun observeSongs() = songDao.observeSongs()

ViewModel:

代码语言:javascript
复制
 private val _observeSongs = MutableStateFlow(emptyList<DatabaseSongListItem>())
    val observeSongs = _observeSongs.asStateFlow()
    viewModelScope.launch {
            songListRepository.getSongs() -> this line can get api songs + it add songs to database
            songListRepository.observeSongs().collect(){ songs ->
                _observeSongs.value = songs
            }
        }

MainActivity:

代码语言:javascript
复制
  lifecycleScope.launch {
            viewModel.observeSongs.collect {
                Log.d(ContentValues.TAG, "MAIN: $it")
            }

这个代码正在工作,但我收集了我的歌曲2次,1在viewModel和另一个我的活动。我只想在活动中收集一次。但是,当我在viewModel中使用这一行代码时,我得到了以下内容:

代码语言:javascript
复制
 _observeSongs.value = songListRepository.observeSongs()
Type mismatch.
Required:
List<DatabaseSongListItem>
Found:
Flow<List<DatabaseSongListItem>>

我想在recyclerView中显示歌曲列表,这就是我需要歌曲列表的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-14 15:19:03

我还不清楚你到底是怎么回事。我创建一个状态流并观察它的干净方式如下所示,但我不知道这是否实现了您想要做的事情。

SharingStarted设置将防止在活动脱离屏幕时对数据库进行不必要的监视,但它是可选的。

ViewModel:

代码语言:javascript
复制
val observeSongs = songListRepository.observeSongs()
    .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList())

init { // I'm assuming you were doing this in init, but maybe you have it in a function
    viewModelScope.launch { songListRepository.getSongs() }
}

活动:

代码语言:javascript
复制
lifecycleScope.launch {
    viewModel.observeSongs.collect {
        myRecyclerViewAdapter.submitList(it)
    }
}

// or alternate syntax:
viewModel.observeSongs
    .onEach { myRecyclerViewAdapter.submitList(it) }
    .launchIn(lifecycleScope)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74066675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档