迁移Preferences DataStore至Proto DataStore时数据未更新问题求助
Proto DataStore迁移不生效问题排查
你的代码存在明确的逻辑错误,和配置无关:
核心错误点
migrate方法中,你虽然调用了toBuilder().setIsUserAware(true).build()生成了修改后的新UserPreferences实例,但没有持有这个新实例,最终返回的仍然是未做任何修改的原始currentData对象,所以设置值完全不会生效。
修正方案
直接把构建完成的新对象作为返回值返回即可,修正后的migrate方法代码如下:
override suspend fun migrate(currentData: UserPreferences): UserPreferences { return currentData.toBuilder() .setIsUserAware(true) .build() }
其他优化提示
- 目前你将
shouldMigrate的返回值硬编码为true,会导致每次DataStore初始化时都重复执行迁移逻辑。建议增加迁移完成标记判断,比如给UserPreferences增加isMigrated字段,首次迁移完成后将该字段置为true,shouldMigrate仅在该字段为false时返回true,避免重复执行迁移。 - 你方法参数中注入了Preferences DataStore实例
userPreferenceStore但暂未使用,后续如果需要读取旧存储的数值完成迁移,直接在migrate的挂起作用域内读取即可,不需要额外嵌套runBlocking。 - 你之前验证业务层直接写入字段可以正常生效,已经排除了序列化配置、DataStore实例创建的基础问题,不需要额外排查这部分逻辑。
内容的提问来源于stack exchange,提问作者Ankit Kapoor
相关产品推荐
相关产品推荐

