Удаление общих настроек
Как удалить данные 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();
Я также разработал библиотеку для удобного управления общими настройками. Вы можете найти следующую ссылку
Чтобы очистить все 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()
Вы можете 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 или телефон с рутованным подключением / планшет и т. Д.