Jetpack Compose 中未显示流数据
Flow data is not showing in jetpack compose
我正在尝试从服务器获取数据并缓存到数据库中,并 return 向用户提供新的获取列表。我正在从服务器获取响应并将其保存到本地数据库,但是当我尝试从可组合函数观察它时,它显示的列表是空的。
当我尝试在 myViewModel 中调试和收集流数据时 class 它显示但未显示是可组合函数。
道
@Dao
interface CategoryDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(categories: List<Category>)
@Query("SELECT * FROM categories ORDER BY name")
fun read(): Flow<List<Category>>
@Query("DELETE FROM categories")
suspend fun clearAll()
}
存储库class:
suspend fun getCategories(): Flow<List<Category>> {
val categories = RetrofitModule.getCategories().categories
dao.insert(categories)
return dao.read()
}
我的视图模型
fun categoriesList(): Flow<List<Category>> {
var list: Flow<List<Category>> = MutableStateFlow(emptyList())
viewModelScope.launch {
list = repository.getCategories().flowOn(Dispatchers.IO)
}
return list
}
观察自:
@Composable
fun StoreScreen(navController: NavController, viewModel: CategoryViewModel) {
val list = viewModel.categoriesList().collectAsState(emptyList())
Log.d("appDebug", list.value.toString()) // Showing always emptyList []
}
当前回复:
2021-05-15 16:08:56.017 5125-5125/com.demo.app D/appDebug: []
您永远不会更新 MutableStateFlow
的 value
,它已作为状态收集在 Composable
函数中。
您还将一个 Flow
类型的对象分配给一个 MutableStateFlow
变量。
我们可以使用以下方法在撰写中更新 collected
流的值:-
mutableFlow.value = newValue
我们需要将列表类型更改为 MutableStateFlow<List<Category>>
而不是 Flow<List<Category>>
试试这个:-
var list: MutableStateFlow<List<Category>> = MutableStateFlow(emptyList()) // changed the type of list to mutableStateFlow
viewModelScope.launch {
repository.getCategories().flowOn(Dispatchers.IO).collect { it ->
list.value = it
}
}
我正在尝试从服务器获取数据并缓存到数据库中,并 return 向用户提供新的获取列表。我正在从服务器获取响应并将其保存到本地数据库,但是当我尝试从可组合函数观察它时,它显示的列表是空的。
当我尝试在 myViewModel 中调试和收集流数据时 class 它显示但未显示是可组合函数。
道
@Dao
interface CategoryDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(categories: List<Category>)
@Query("SELECT * FROM categories ORDER BY name")
fun read(): Flow<List<Category>>
@Query("DELETE FROM categories")
suspend fun clearAll()
}
存储库class:
suspend fun getCategories(): Flow<List<Category>> {
val categories = RetrofitModule.getCategories().categories
dao.insert(categories)
return dao.read()
}
我的视图模型
fun categoriesList(): Flow<List<Category>> {
var list: Flow<List<Category>> = MutableStateFlow(emptyList())
viewModelScope.launch {
list = repository.getCategories().flowOn(Dispatchers.IO)
}
return list
}
观察自:
@Composable
fun StoreScreen(navController: NavController, viewModel: CategoryViewModel) {
val list = viewModel.categoriesList().collectAsState(emptyList())
Log.d("appDebug", list.value.toString()) // Showing always emptyList []
}
当前回复:
2021-05-15 16:08:56.017 5125-5125/com.demo.app D/appDebug: []
您永远不会更新 MutableStateFlow
的 value
,它已作为状态收集在 Composable
函数中。
您还将一个 Flow
类型的对象分配给一个 MutableStateFlow
变量。
我们可以使用以下方法在撰写中更新 collected
流的值:-
mutableFlow.value = newValue
我们需要将列表类型更改为 MutableStateFlow<List<Category>>
而不是 Flow<List<Category>>
试试这个:-
var list: MutableStateFlow<List<Category>> = MutableStateFlow(emptyList()) // changed the type of list to mutableStateFlow
viewModelScope.launch {
repository.getCategories().flowOn(Dispatchers.IO).collect { it ->
list.value = it
}
}