Android'de Uygulamadan paylaşılan tercih verileri nasıl silinir


478

Uygulamam için SharedPreferences verilerini nasıl silebilirim?

Verileri senkronize etmek için çok sayıda web hizmeti kullanan bir uygulama oluşturuyorum. Test amacıyla, uygulamayı yeniden başlattığımda bazı SharedPreferences değerlerini silmem gerekiyor.

Yanıtlar:


870

Belirli değerleri kaldırmak için: SharedPreferences.Editor.remove () ve ardından acommit()

Bunları kaldırmak için tüm SharedPreferences.Editor.clear()a, ardındancommit()

Dönüş değerini umursamıyorsanız ve bunu uygulamanızın ana iş parçacığından kullanıyorsanız, apply()bunun yerine kullanmayı düşünün .


268
context.getSharedPreferences ("YOUR_PREFS", 0) .edit (). clear (). commit (); // tüm tercihlerinizi kaldırın :)
rubdottocom 17:12

2
@yoshi kesinlikle bir kaldır () yanı sıra bir açık () vardır. Belirli tercihleri ​​kaldırmak için remove (), tümünü kaldırmak için clear () kullanırsınız. Orijinal soru hepsini kaldırmaları gerekip gerekmediği belli değildi.
Mark B

9
Tercihler dosyasını temizlemek, dosyayı gerçekten silmiş gibi görünmüyor. Kendi testlerimde Uygulama Bilgisi panelinde listelenen "Veri" kullanımını izleyerek yeni bir SharedPreference dosyası oluşturmak bu değere 4KB ekler, ancak editor.clear (). Commit () kullanmak sayıyı azaltmaz.
Kod Komutanı

2
@rubdottocom Yorumunuzu neden ayrı bir cevap olarak koymuyorsunuz?
technophyle

10
@rubdottocom .commit () yerine .apply () kullanarak daha iyi
Juan Aguilar Guisado

173

Çözümüm:

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

2
Bu sadece TEXT değişkenini kaldırır mı?
Si8

3
@ SiKni8 Evet, bu yalnızca anahtarlı anahtar / değer çiftini kaldırır "text".
Dennis

Çalışabildim çünkü bir süredir oldu ama cevap için teşekkür ederim :)
Si8

Benim mutlak akıl sağlığımı kurtardın. : P TEŞEKKÜR EDERİZ. Bir kerede bir nesnenin bir elemanı için tercihleri ​​temizlemeye çalışıyordum ve bu güzel çalışıyor.
Azurespot

3
Görevi bir arka plan iş parçacığında yapmak için commit () yerine Apply () kullanmayı düşünün.
Zon

124

Tüm tercihleri ​​kaldırma:

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

Tek tercihin kaldırılması:

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

1
Ne olacak KeyName?
hasnain_ahmad

2
Yalnızca dosyanın içindeki tercihleri ​​değil, tüm tercih dosyasını nasıl silebilirim?
Srikar Reddy

Görevi bir arka plan iş parçacığında yapmak için commit () yerine Apply () kullanın. commit () blokları anında saklar ve depoya veri yazar. uygulamak () zaman uyumsuzdur.
Vaibhav

64

Her seferinde çıkarılması gerekli değilse, manuel olarak şu adresten kaldırabilirsiniz:

Ayarlar -> Uygulamalar -> Uygulamaları yönet -> (uygulamanızı seçin) -> Verileri temizle veya Kaldır

Android'in daha yeni sürümleri:

Ayarlar -> Uygulamalar -> (uygulamanızı seçin) -> Depolama Alanı -> Verileri temizle ve Önbelleği temizle


5
bu şeyleri programatik yapabilir miyiz?
Dostluk

@amity Diğer cevap programlı olarak yapıyor.
Doomsknight

31
Programlı olmayan bir seçenek için teşekkürler.
CorayThan

2
@amity - Bazılarımızın bu cevaba ihtiyacı vardı. Kodumu test etmeye devam edebilmek için bir Android Emulator üzerindeki SharedPrefs'i nasıl kaldıracağımdan emin değildim.
TJ Biddle

1
Android stüdyosunda yok 2.2.2 10/18/2016.
Robin kuş gibi

26

Android Paylaşımlı Tercihlerini bir satırda silme :-)

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

Veya applyengellemeyen eşzamansız çalışma için:

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

Benim için en iyi çözüm. Paylaşılan tercihler içeriği için senkronizasyonun gerekli olduğu birkaç durum vardır.
Juan Aguilar Guisado

19

Tüm çözümlerin tamamen çalışmadığını veya ölmediğini görünüyor

Etkinlikteki tüm Paylaşılan Tercihleri ​​temizleme

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

OnCreate'den sonra bunu Ana Etkinlikten çağırın

not * .apply()yerine kullandığım .commit(), commit ();


tam olarak ne istediğimi. Teşekkürler tüm varsayılan tercihleri ​​temizler
Arpit Patel

11

Köklü bir telefon olmasa bile bunu yapmak için adb kabuğunu kullanabilirsiniz. Tek yakalama, uygulamanın hata ayıklanabilir olması gerektiğidir.

run-as <your package name> <command>

Örneğin:

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

Alternatif olarak, yukarıdakileri sadece uygulama paketi köküne yönlendirecek ve uygulamanın bağlamında daha fazla komut yürütmenize izin verecek komut olmadan yapabilirsiniz.


1
Faydalı ipucu için +1 run-as. Bunu 3 yıl sonra bulurdum ...
Richard Le Mesurier

Bu Paylaşılan Tercihler değil, sqlite veritabanı
OneCricketeer

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

9

API 24 (Nougat) itibariyle şunları yapabilirsiniz:

context.deleteSharedPreferences("YOUR_PREFS");

Bununla birlikte, geriye dönük uyumluluk yoktur, bu nedenle 24'ten az bir şey destekliyorsanız, aşağıdakilere bağlı kalın:

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

9

Hepsini temizle:

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

8

Cihazınızı kullanarak uygulamanızı manuel olarak da kaldırabilirsiniz. Ardından uygulamanızı yeniden yüklediğinizde, paylaşılan tercihler sıfırlanmıştır.


Teşekkürler - bu benim için çalıştı böylece programlı olarak paylaşılanPreferences kaldırmak istemiyordu.
Simon

Cihazımda, benim için çalışan ve uygulamamı yeniden yükleme ihtiyacını kaldıran kaldırma seçeneğinde "verileri temizle" seçeneğim var.
G O'Rilla

8

Sınıf tanımlarında:

private static final String PREFERENCES = "shared_prefs";

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

Sınıf içinde:

public static void deleteAllSharedPrefs(){
    sharedPreferences.edit().clear().commit();
}

7

Bu kodu deneyin:

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

5

Testiniz içinse. Adb komutlarını kullanabilirsiniz.

adb shell pm clear <package name>

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

Bu, kaydedilen paylaşılan tercihleri ​​"someTag" adıyla silecektir.


3
  • Belirli bir değeri kaldırmak için,

SharedPreferences.Editor remove (String key) ve ardından bir commit () veya bir Apply ()

  • Tüm değerleri kaldırmak için,

    SharedPreferences.Editor clear () ve ardından bir kesinleştirme () veya bir uygulama ()


3

Anahtar / değer çiftlerini tercihten kaldırmak için aşağıdakileri kolayca yapabilirsiniz

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

Ayrıca, paylaşılan tercihlerin kolayca manipüle edilmesi için bir kütüphane geliştirdim. Aşağıdaki bağlantıyı bulabilirsiniz

https://github.com/farruhha/SimplePrefs


2

Tüm SharedPreferences'ı herhangi bir sınıftan merkezi olarak temizlemek için:

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

Ve sonra herhangi bir sınıftan: (commit, Tercihlerinizin silinip temizlenmediğini kontrol edebileceğiniz bir Boole döndürür)

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

Veya uygulamak kullanabilirsiniz; boş döndü

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

1
new File(context.getFilesDir(), fileName).delete();

Paylaşılan tercihlerdeki dosyayı onunla silebilirim


Yukarıdaki tüm çözümler yanlıştır, paylaşılan tercihleri ​​silmek için yalnızca silme dosyası doğrudur
Dreamer

1

Birçok paylaşılan tercihler anahtarım olduğu için cevapların hiçbiri benim için çalışmıyor.

Diyelim ki birim testi yerine bir Android Testi çalıştırıyorsunuz.

Benim için çalışıyor ve tüm paylaşılan_prefs dosyaları üzerinden silin .

@BeforeClass tüm testlerden ve ActivityTestRule'den önce çalışır

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

0

KOTLIN KTX yolu tüm temizlemek tercihleri:

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

Örneklerle tüm Paylaşılan tercihler işlemleri için buraya tıklayın


-2

preferences.edit().remove("key").commit()Kayıtlı değerleri paylaşılan tercihlerden silmek için kullanabilirsiniz .


-6

Sadece bu sabah yaptım. Bir komut isteminden:

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

NOT : Bu, stok Android sanal cihazları, bir Genymotion cihazı veya gerçek bir köklü el cihazı / tablet vb. Gibi köklü bir cihaz gerektirir.


9
Bu yüzden aşağıya kim bu çözümü oyladı belki de açıklamak gerekir: /data/dataDoğrudan erişmek için köklü bir telefona ihtiyacınız var !
nuala

3
ADB Shell değil, SharedPreferences Uygulamasını kaldırmanız gerekir. SharedPreferences.edit (). Clear (). Commit ();
ThePunisher

Sorulan hiçbir zaman köklü bir çözüm istemediklerini söylemedi. Yine de burada teknik bir hata var; Bu yöntem kök gerektirdiğinden, çalıştırmak zorunda susonra adb shellayrıcalıklı kabuğunu açmak için.
Anubian Noob

Bu neden bu kadar çok düşürüldü? Bu yararlı bir cevap ve aradığım cevap.
Matt D
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.