2010-09-10 5 views
358

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

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

+0

Проверить это http://www.gadgetsaint.com/go/ xb023 – ASP

ответ

681

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

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

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

+217

context.getSharedPreferences ("YOUR_PREFS", 0) .edit(). clear(). commit(); // удаляем все ваши префы :) – rubdottocom

+2

@yoshi определенно есть remove(), а также clear(). Вы используете remove() для удаления определенных настроек, вы используете clear(), чтобы удалить их все. Первоначальный вопрос не был ясен, если им нужно было удалить их всех или нет. –

+9

Удаление файла настроек не означает, что он действительно удаляет его. В моих собственных тестах, наблюдая за использованием «данных», перечисленных на панели «Сведения о приложении», создание нового файла SharedPreference добавляет к этому значению 4 КБ, но с помощью редактора.clear(). Commit() не уменьшает число. –

-4

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

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 устройстве или фактический коренятся телефон/планшет и т.д.

+8

Итак, кто бы ни проголосовал за это решение, может также объяснить, почему: вам нужен корневой телефон для доступа к '/ data/данные' прямо! – yoshi

+3

Вам необходимо удалить SharedPreferences из приложения, а не в оболочку ADB. Это делается с помощью: SharedPreferences.edit(). Clear(). Commit(); – ThePunisher

+0

На вопрос никогда не говорилось, что они не нуждаются в корневом решении. Однако здесь есть техническая ошибка; потому что для этого метода требуется root, вам нужно запустить 'su' после' adb shell', чтобы открыть привилегированную оболочку. –

128

Моего решения:

SharedPreferences preferences = getSharedPreferences("Mypref", 0); 
preferences.edit().remove("shared_pref_key").commit(); 
+1

Удаляет ли только переменную TEXT? – Si8

+1

@ SiKni8 Да, это удаляет только пару ключ/значение с ключом «текст». – Dennis

+0

Мне удалось заставить его работать, потому что прошло какое-то время, но спасибо за ответ :) – Si8

47

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

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

более новые версии Android:

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

+4

можем ли мы делать это по-программному. – amity

+0

@amity Другой ответ программно. – Doomsknight

+19

Спасибо за не-программный вариант. – CorayThan

-5

Самый быстрый способ сделать это во время разработки/тестирования будет

ADB деинсталлировать

Пример: $ ADB деинсталлировать com.example.myappname

+2

Нет, это не самый быстрый, нажав кнопку очистки кеша в настройках> Приложение> YourApp – ralphgabb

+0

. Я думаю, что это не очистит только общие настройки, это очистит все приложение от устройства :), что не является вопросом задавая – MBH

10

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

run-as <your package name> <command> 

Например:

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

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

+1

+1 для полезного совета на 'run-as'. Вы бы подумали, что я нашел бы это через 3 года ... –

86

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

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(); 
+1

Что будет 'KeyName'? –

+0

Как удалить весь файл настроек, а не только настройки внутри файла? –

8
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit(); 
editor.clear(); 
editor.commit(); 
+0

thumbs up to Context.MODE_PRIVATE – ralphgabb

5

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

+0

Спасибо - я не захотел программным образом удалить sharedPreferences, чтобы это сработало для меня. – Simon

+0

На моем устройстве у меня есть опция «очистить данные» по опции удаления, которая работала на меня и удалила необходимость переустановки моего приложения. –

-2

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

17

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

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

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

очень четкое и точное решение! плюс 1 – technophyle

+0

Лучшее решение для меня. Есть несколько случаев, когда синхронный необходим для контента sharedpreferences. –

12

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

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

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

Зов это от основной деятельности после OnCreate

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

.apply() 

вместо

.commit() 

вы свободны в выборе фиксации();

+0

именно то, что я хочу. Спасибо, он очищает все настройки по умолчанию –

6

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

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

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

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

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

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

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

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

// очистить их все

6

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

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(); 
     } 
3

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

context.deleteSharedPreferences("YOUR_PREFS"); 

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

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); 
2
  • Чтобы удалить конкретное значение,

SharedPreferences.Editor удалить (Строковый ключ), за которым следует фиксация() или применение()

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

    SharedPreferences.Editor ясно() следуют фиксации() или применить()

Смежные вопросы