0

我遇到了这个问题,修复很简单但不明显,所以我想我会分享。

我正在将单个字段从迁移SharedPreferences到 aPreferences DataStore并使用默认值SharedPreferencesMigration来执行此操作。每次迁移运行时,我的SharedPreferences文件都会被删除。

4

1 回答 1

1

如果您要将单个SharedPreferences首选项迁移到一个Preferences DataStore(或多个首选项但不是全部),您必须提供一组键到SharedPreferencesMigration. 不这样做将导致您的SharedPreferences文件被删除。

这是迁移后运行的SharedPreferencesMigration'cleanUp()函数:

override suspend fun cleanUp() {
    val sharedPrefsEditor = sharedPrefs.edit()

    if (keySet == null) {
        sharedPrefsEditor.clear()
    } else {
        keySet.forEach { key ->
            sharedPrefsEditor.remove(key)
        }
    }

    if (!sharedPrefsEditor.commit()) {
        throw IOException("Unable to delete migrated keys from SharedPreferences.")
    }

    if (sharedPrefs.all.isEmpty() && context != null && name != null) {
        deleteSharedPreferences(context, name)
    }

    keySet?.clear()
}

请注意,迁移将删除所有已迁移的密钥,或者如果未提供任何密钥,请调用clear()编辑器,该编辑器将删除所有密钥。然后,如果删除所有密钥,它将删除该文件。

解决此问题的方法只是为 提供一组键SharedPreferencesMigration,它作为可选参数提供。

SharedPreferencesMigration(
    context = context,
    sharedPreferencesName = "preferences file name"
    keysToMigrate = setOf("your key name")
)
于 2021-09-24T20:29:59.943 回答