【发布时间】:2020-03-07 03:12:12
【问题描述】:
我正在使用 Room (v. 2.2.1) 和协程支持 (v. 1.3.2) 并遵循设置
@Entity(tableName = "simple_table")
data class SimpleEntity(
@PrimaryKey(autoGenerate = true) val id: Long = 0
)
@Dao
interface SimpleDao {
@Query("SELECT * FROM simple_table WHERE id = :id")
fun getRecord(id: Long): Flow<SimpleEntity?>
@Insert
suspend fun insert(entity: SimpleEntity)
}
然后,在我将数据插入到 simple_table 中,自动生成的 id 为 1 之后,我尝试查询
db.simpleDao.getRecord(1).collect {
//fetch data
}
db.close()
永远无法联系到db.close()。它只是冻结在collect() 方法中。如果我将代码更改为
db.simpleDao.getRecord(1).first {
//fetch data
}
或
db.simpleDao.getRecord(1).take(1).collect {
//fetch data
}
然后它可以正常工作。但是为什么普通的collect() 永远不会结束他们的执行?我在 Room 配置中遗漏了什么以使其正常工作?
【问题讨论】:
-
这闻起来像一个库错误。
标签: android kotlin android-room kotlin-coroutines flow