我有一个返回对象流的 Room 数据库。当我向数据库中插入一个新项目时,只有在从同一个 Fragment/ViewModel 执行插入时才会触发 Flow 的 collect 函数。
我录制了一个快速视频来展示这个问题:https : //www.youtube.com/watch?v=7HJkJ7M1WLg
这是我为相关文件设置的代码:
AchievementDao.kt:
@Dao
interface AchievementDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(achievement: Achievement)
@Query("SELECT * FROM achievement")
fun getAllAchievements(): Flow<List<Achievement>>
}
Run Code Online (Sandbox Code Playgroud)
应用数据库.kt:
@Database(entities = [Achievement::class], version = 1, exportSchema = false)
abstract class AppDB : RoomDatabase() {
abstract fun achievementDao(): AchievementDao
}
Run Code Online (Sandbox Code Playgroud)
AchievementRepository.kt :
class AchievementRepository @Inject constructor(appDB: AppDB) {
private val achievementDao = appDB.achievementDao()
suspend fun insert(achievement: Achievement) {
withContext(Dispatchers.IO) {
achievementDao.insert(achievement)
}
}
fun getAllAchievements() = …Run Code Online (Sandbox Code Playgroud)