小编Mar*_*arc的帖子

当从另一个 Fragment/ViewModel 执行插入时,从 Room 返回的 Kotlin Flow 不会更新

我有一个返回对象流的 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)

android kotlin android-room kotlin-coroutines kotlin-flow

5
推荐指数
2
解决办法
2645
查看次数