【问题标题】:Did you forget to call Flow<PagingData<*>>.cachedIn(coroutineScope)?您是否忘记调用 Flow<PagingData<*>>.cachedIn(coroutineScope)?
【发布时间】:2022-11-10 23:22:12
【问题描述】:

如何修复 IllegalStateException:尝试从 pageEventFlow 收集两次,这是非法操作。

您是否忘记调用 Flow<PagingData<*>>.cachedIn(coroutineScope)?

代码:

import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.switchMap
import androidx.lifecycle.viewModelScope
import androidx.paging.cachedIn
import com.kharismarizqii.movieapp.data.MovieRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

@HiltViewModel
class MovieViewModel @Inject constructor(
    private val repository: MovieRepository,
    state: SavedStateHandle) : ViewModel(){

    companion object{
        private const val CURRENT_QUERY = "current_query"
        private const val EMPTY_QUERY = ""
    }

    private val currentQuery = state.getLiveData(CURRENT_QUERY, EMPTY_QUERY)
    val movies = currentQuery.switchMap { query ->
        if (query.isNotEmpty()){
            repository.getSearchMovies(query)
        }else{
            repository.getNowPlayingMovies().cachedIn(viewModelScope)
        }
    }

    fun searchMovies(query: String){
        currentQuery.value = query
    }
}

碰撞:

  java.lang.IllegalStateException: Attempt to collect twice from pageEventFlow, which is an illegal operation. Did you forget to call Flow<PagingData<*>>.cachedIn(coroutineScope)?
  

【问题讨论】:

  • 那么......你的viewModel 是否像例外所说的那样打电话给cachedIn?请直接在您的问题中包含您的所有代码。

标签: android mvvm kotlin-coroutines android-mvvm android-paging-library


【解决方案1】:

您也应该缓存getSearchMovies 的数据

    private val currentQuery = state.getLiveData(CURRENT_QUERY, EMPTY_QUERY)
    val movies = currentQuery.switchMap { query ->
        if (query.isNotEmpty()){
            repository.getSearchMovies(query).cachedIn(viewModelScope)
        }else{
            repository.getNowPlayingMovies().cachedIn(viewModelScope)
        }
    }

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多