【发布时间】:2022-02-04 07:05:16
【问题描述】:
我是 kotlin flow 的新手,我正在处理这个文档。 Kotlin Flows。在这段代码中,数据源每五秒从 api 获取数据并发出它。
这是我的示例数据源类。
我正在获取数据并发送它。
class RemoteDataSourceImpl @Inject constructor(
private val api:CryptoApi
): RemoteDataSource {
override suspend fun cryptoList(): Flow<List<CryptoCoinDto>> {
return flow {
while (true){
val data = api.getCoinList()
emit(data)
delay(5000L)
}
}
}
}
这是我的示例存储库。
我正在映射数据并将其保存为房间数据库。由于单一事实来源原则,我想从房间数据库中获取数据并发出它,但我仍然必须返回 dataSource,因为如果我打开新流{},我无法访问数据源的数据。当然,我可以通过在 RemoteDataSource 类中使用 List 而不是 Flow 来解决问题。但我想了解这个例子。我如何在这里应用单一事实来源。
class CoinRepositoryImpl @Inject constructor(
private val dataSource:RemoteDataSource,
private val dao: CryptoDao
):CoinRepository {
override fun getDataList(): Flow<List<CryptoCoin>> {
dataSource.cryptoList().map { dtoList ->
val entityList = dtoList.map { dto ->
dto.toCryptoEntity()
}
dao.insertAll(entityList)
}
return dataSource.cryptoList().map {
it.map { it.toCryptoCoin() }
}
}
【问题讨论】:
-
所以你需要在两个不同的地方收集物品,对吗?
-
我想将项目保存在房间数据库中,然后从数据库中收集它们并将其作为主数据发出。为单一事实来源原则。我可以管理单次获取,但这个示例有多个发射,我无法处理它。 @broot
标签: android kotlin repository kotlin-flow