【发布时间】:2022-11-10 12:57:29
【问题描述】:
我正在使用改造并从新闻 api 中获取数据。 我想使用流,所以我在存储库中执行此操作:
fun getTopArticles(): Flow<List<Article>> {
return flow {
val topArticles = apiService.getTopHeadlinesArticles().articles
.map { article ->
Article(
title = article.title,
content = article.content
)
}
emit(topArticles)
}.flowOn(Dispatchers.IO)
}
视图模型:
private val _observeTopArticles = MutableStateFlow(emptyList<Article>())
val observeTopArticles = _observeTopArticles.asStateFlow()
init {
viewModelScope.launch {
articleRepository.getTopArticles()
.collect{
_observeTopArticles.value = it
}
}
}
活动:
lifecycleScope.launch{
viewModel.observeTopArticles.collect{
if (it.isNotEmpty()){
}
}
}
我想得到这样的东西:
[Article(I know something, some content)] etc.
但我明白了:
[android.newz.domain.Article@5f612be, android.newz.domain.Article@700f1f]
我想在 RecyclerView 中使用它。
【问题讨论】:
-
顺便说一句,如果您只返回一个项目,为什么还要使用流程?您是否计划将来返回多个列表?如果没有,则使用常规挂起函数而不是流。您的代码将更简单、更清晰。
-
目前我只返回 1 个列表,但我正在使用它,因为我需要搜索它的内容和标题。不确定这是否是一个好习惯。
标签: android kotlin retrofit kotlin-flow