You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:31:12