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

使用SharedPreferencesMigration迁移至DataStore后SharedPreferences被删除怎么办

SharedPreferences 迁移至 DataStore 后原文件被删除问题解决

问题根因

SharedPreferencesMigration 默认配置中包含 deleteIfEmpty = true 参数,当你仅迁移单个字段、迁移完成后原 SharedPreferences 文件内无任何留存键值对时,会自动触发删除原文件的逻辑。

修复方案

如果你需要保留原 SharedPreferences 文件供其他业务逻辑使用,构造迁移实例时显式将 deleteIfEmpty 设为 false 即可,参考代码如下:

val settingsDataStore = context.createDataStore(
    name = "app_settings_datastore",
    migrations = listOf(
        SharedPreferencesMigration(
            context = context,
            sharedPreferencesName = "your_old_sp_file_name",
            // 指定仅迁移需要的单个字段
            keysToMigrate = setOf("your_target_field_key"),
            // 关闭空文件自动删除逻辑
            deleteIfEmpty = false
        )
    )
)

补充说明

  • 如果你已经完成全部 SharedPreferences 数据的迁移、后续不会再使用原 SP 文件,默认的自动删除行为符合预期,不需要做额外调整
  • 多模块共用同一个 SP 文件的场景下,建议统一配置 deleteIfEmpty = false,避免其他模块读取 SP 时出现空数据异常

内容的提问来源于stack exchange,提问作者Matt Robertson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:45:05