使用SharedPreferencesMigration迁移至DataStore后SharedPreferences被删除怎么办
问题根因
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
相关产品推荐
相关产品推荐

