jam*_*s04 5 android repository mvvm kotlin kotlin-coroutines
假设我有一个 Dtos 列表,我想遍历它们并设置一些值,然后将它们插入/更新到我的 Room 数据库。所以从我的 ViewModel 我调用存储库类,在那里运行循环,然后我调用 dao.insertItems(list)。
fun updateItems(itemList: List<ItemDto>) {
        val readDate = DateUtils.getCurrentDateUTCtoString()
        ???SCOPE???.launch(Dispatchers.IO) {
            for (item in itemList)
                item.readDate = readDate
            itemDao.updateItems(itemList)
        }
    }
问题是我必须在 Repository 类中使用什么样的 CourtineScope。我是否必须使用 Dispatchers.Main.. 创建一个 repositoryScope?也许是 GlobalScope ......?
Fra*_*esc 13
您应该将存储库 API 编写为suspend函数,如下所示
suspend fun updateItems(itemList: List<ItemDto>) = withContext(Dispatchers.IO) {
    val readDate = DateUtils.getCurrentDateUTCtoString()
    for (item in itemList)
        item.readDate = readDate
    itemDao.updateItems(itemList)
}
编辑:如果您需要在视图模型被销毁后运行它,请使用NonCancellable,
suspend fun updateItems(itemList: List<ItemDto>) = withContext(Dispatchers.IO + NonCancellable) {
    val readDate = DateUtils.getCurrentDateUTCtoString()
    for (item in itemList)
        item.readDate = readDate
    itemDao.updateItems(itemList)
}
| 归档时间: | 
 | 
| 查看次数: | 1921 次 | 
| 最近记录: |