Удаление общих настроек

Как удалить данные SharedPreferences для моего приложения?

Я создаю приложение, которое использует множество веб-сервисов для синхронизации данных. В целях тестирования мне нужно стереть некоторые значения SharedPreferences при перезапуске приложения.

31 ответ

Решение

Чтобы удалить определенные значения: SharedPreferences.Editor.remove (), а затем commit()

Чтобы удалить их всех SharedPreferences.Editor.clear() с последующим commit()

Если вас не волнует возвращаемое значение, и вы используете его из основного потока вашего приложения, рассмотрите возможность использования apply() вместо.

Мое решение:

SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();

Удаление всех настроек:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();

Удаление одного предпочтения:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();

Если нет необходимости удалять каждый раз, вы можете удалить его вручную из:

Настройки -> Приложения -> Управление приложениями -> (выберите приложение) -> Очистить данные или удалить

Новые версии Android:

Настройки -> Приложения -> (выберите приложение) -> Хранилище -> Очистить данные и Очистить кеш

Удаление общих настроек Android в одну строку:-)

context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();

Или же apply для неблокирующей асинхронной операции:

this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();

Кажется, что все решение не полностью работает или устарело

очистить все SharedPreferences в действии

      PreferenceManager.getDefaultSharedPreferences(getBaseContext()).
      edit().clear().apply();

Вызовите это из основной активности после onCreate

примечание * я использовал

.apply()

вместо

.commit()

вы можете выбрать commit();

Начиная с API 24 (нуга) вы можете просто сделать:

context.deleteSharedPreferences("YOUR_PREFS");

Однако обратной совместимости нет, поэтому, если вы поддерживаете менее 24, придерживайтесь:

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); 

В определениях классов

private static final String PREFERENCES = "shared_prefs";

private static final SharedPreferences sharedPreferences  = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);

внутри класса

public static void deleteAllSharePrefs(){
        sharedPreferences.edit().clear().commit();
      }
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();

Вы можете использовать оболочку adb, чтобы сделать это даже без рутированного телефона. Единственный улов в том, что приложение должно быть отлаживаемым.

run-as <your package name> <command>

Например:

run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db

В качестве альтернативы, вы можете просто сделать выше, но без команды, которая направит вас к корню пакета приложения и позволит вам выполнять больше команд в контексте приложения.

Очистить их все:

PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()

Вы также можете просто вручную удалить приложение с помощью устройства. Затем при переустановке приложения общие настройки были сброшены.

Для пользователей Kotlin это довольно просто:

      val sharedPref = context.getSharedPreferences("myPref", Context.MODE_PRIVATE)
 sharedPref.edit().clear().apply()

Если это для вашего тестирования. Вы можете использовать команды ADB.

adb shell pm clear <package name>

Попробуйте этот код:

SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();

Вы всегда можете сделать это программно, как это предлагают другие ответы здесь. Но для целей разработки я нахожу этоPlugin очень полезно, так как значительно ускоряет мое развитие.

ПЛАГИН: Идея ADB

Он предоставляет вам функции для очистки данных приложения и отзыва разрешений из самой Android Studio одним нажатием кнопки.

введите описание изображения здесь

String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();

Это удалит сохраненные общие настройки с именем "someTag".

Чтобы удалить пары ключ-значение из предпочтения, вы можете легко сделать следующее

getActivity().getSharedPreference().editor().remove("key").apply();

Я также разработал библиотеку для удобного управления общими настройками. Вы можете найти следующую ссылку

https://github.com/farruhha/SimplePrefs

Чтобы очистить все SharedPreferences из любого класса:

public static SharedPreferences.Editor getEditor(Context context) {
    return getPreferences(context).edit();
}

Затем из любого класса:(Commit возвращает Boolean, где вы можете проверить, очищены ли ваши настройки или нет)

        Navigation.getEditor(this).clear().commit();

Или: вы можете использовать Apply: он возвращает void Navigation.getEditor(this).clear(). Apply();

В Котлине КОГО способ очистить все настройки:

val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
    clear()
}

Щелкните здесь, чтобы просмотреть все операции с общими настройками с примерами

  • Чтобы удалить конкретное значение,

SharedPreferences.Editor remove (String key), за которым следует commit() или apply()

  • Чтобы удалить все значения,

    SharedPreferences.Editor clear (), за которым следует commit() или apply()

Одна строка кода на котлине:

      getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE).edit().clear().apply()

Ни один из ответов не работает для меня, так как у меня много общих ключей настроек.

Допустим, вы используете Android тест вместо юнит-теста.

Это работает для меня цикл и удалить через все файлы shared_prefs.

@BeforeClass будет запущен до всех тестов и ActivityTestRule

@BeforeClass
public static void setUp() {
    Context context = InstrumentationRegistry.getTargetContext();

    File root = context.getFilesDir().getParentFile();
    String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list();
    for (String fileName : sharedPreferencesFileNames) {
        context.getSharedPreferences(fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
    }
}
new File(context.getFilesDir(), fileName).delete();

Я могу удалить файл в общих настройках с ним

Мой ответ:

В Java:

      SharedPreferences myPrefs = context.getSharedPreferences("My_Pref", Context.MODE_PRIVATE);
myPrefs.edit().remove("my_key").apply();

В Котлине:

      val myPrefs = context.getSharedPreferences("My_Pref", Context.MODE_PRIVATE)
myPrefs.edit().remove("my_key").apply()

Котлин:

        var prefs2: SharedPreferences? = context!!.getSharedPreferences("loginFB", 0)
  prefs2!!.edit().remove("email").commit()

Это мой Kotlin метод:

            public fun clearAllSharedPrefs() {
            val sharedPreferences: SharedPreferences = MainApplication.applicationContext()
                .getSharedPreferences("MY_CUSTOME_KEY", Context.MODE_PRIVATE)
            sharedPreferences.edit().clear()
            sharedPreferences.edit().apply()
        }

ОБНОВЛЕНИЕ 2018:

Ты можешь использовать PowerPreference

Чтобы удалить все данные из всех общих файлов настроек в приложении, используйте:

PowerPreference.clearAll()

Очистить файл по умолчанию

PowerPreference.getDefaultFile().clear()

Очистить конкретный файл по имени

PowerPreference.getFileByName(fileName).clear()

https://github.com/AliEsaAssadi/Android-Power-Preference

Вы можете use-> preferences.edit().remove("key").commit(); удалить сохраненное значение из общих настроек.

Просто сделал это сегодня утром. Из командной строки:

adb shell
cd /data/data/YOUR_PACKAGE_NAME/shared_prefs
rm * // to remove all shared preference files
rm YOUR_PREFS_NAME.xml // to remove a specific shared preference file

ПРИМЕЧАНИЕ. Для этого требуется рутованное устройство, такое как обычные виртуальные устройства Android, устройство Genymotion или телефон с рутованным подключением / планшет и т. Д.

Другие вопросы по тегам