Удалить файл SharedPreferences - PullRequest
16 голосов
/ 25 мая 2011

Я разрешаю пользователю создавать несколько SharedPreferences файлов, но я также хотел бы, чтобы у них была возможность удалить эти файлы. Я знаю, что могу использовать внутреннюю память, но это не мой вопрос.

Мой вопрос: «Как я могу удалить в коде или вручную (не просто очистить) файл SharedPreferences

Ответы [ 4 ]

32 голосов
/ 25 мая 2011

Если вы получаете SharedPreferences экземпляр через Context.getSharedPreferences("X"), тогда ваш файл будет называться X.xml.

Он будет расположен на /data/data/com.your.package.name/shared_prefs/X.xml.Вы можете просто удалить этот файл с места.Также проверьте файл /data/data/com.your.package.name/shared_prefs/X.bak и, если он существует, удалите его тоже.

Но учтите, что экземпляр SharedPreferences сохраняет все данные в памяти.Поэтому вам нужно сначала очистить настройки, зафиксировать изменения и только потом удалять файл поддержки настроек.

Этого должно быть достаточно для реализации вашего проектного решения.

24 голосов
/ 01 июля 2013

Вот простой способ очистить все SharedPreferences для данного контекста, полезный для юнит-тестов

public static void clearSharedPreferences(Context ctx){
    File dir = new File(ctx.getFilesDir().getParent() + "/shared_prefs/");
    String[] children = dir.list();
    for (int i = 0; i < children.length; i++) {
        // clear each of the prefrances
        ctx.getSharedPreferences(children[i].replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
    }
    // Make sure it has enough time to save all the commited changes
    try { Thread.sleep(1000); } catch (InterruptedException e) {}
    for (int i = 0; i < children.length; i++) {
        // delete the files
        new File(dir, children[i]).delete();
    }
}

обратите внимание, что при использовании вы используете для Android модульного тестирования. и вы используете sharedpreferences в вашем классе Application, это может вызвать состояние гонки и работать некорректно.

6 голосов
/ 29 марта 2017
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        context.deleteSharedPreferences(preferencesKey);
} else {
    try {
        FileUtils.cleanDirectory(new File(context.getCacheDir().getParent() + "/shared_prefs/"));
    } catch (IOException e) {
        Log.e(TAG, "Cannot delete files in shared pref directory", e);
    }
}
2 голосов
/ 07 декабря 2013

Это просто Genius!

Ваш путь к файлу sd карты preference.xml по умолчанию может быть следующим: / data / data / имя вашего пакета / shared_prefs / ваш файл общих настроек xml .

как, / data / data / com.hirecraft.hirecraftmanager / shared_prefs / swipe_preferences.xml .

удалить файл настроек XML:

File deletePrefFile = new File("/data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml");
deletePrefFile.delete();

Или получить путь к файлу в виде строки,

String filePath = getApplicationContext().getFilesDir().getParent()+"/shared_prefs/swipe_preferences.xml";
File deletePrefFile = new File(filePath );
 deletePrefFile.delete();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...