Cara menghapus data preferensi bersama dari Aplikasi di Android


478

Bagaimana cara saya menghapus data SharedPreferences untuk aplikasi saya?

Saya membuat aplikasi yang menggunakan banyak layanan web untuk menyinkronkan data. Untuk tujuan pengujian, saya perlu menghapus beberapa nilai SharedPreferences ketika saya me-restart aplikasi.

Jawaban:


871

Untuk menghapus nilai tertentu: SharedPreferences.Editor.remove () diikuti oleh acommit()

Untuk menghapusnya semua SharedPreferences.Editor.clear()diikuti oleh acommit()

Jika Anda tidak peduli dengan nilai pengembalian dan Anda menggunakan ini dari utas utama aplikasi Anda, pertimbangkan untuk menggunakannya apply().


268
context.getSharedPreferences ("YOUR_PREFS", 0) .edit (). clear (). commit (); // hapus semua prefs Anda :)
rubdottocom

2
@Yoshi pasti ada remove () dan juga clear (). Anda menggunakan remove () untuk menghapus preferensi tertentu, Anda menggunakan clear () untuk menghapus semuanya. Pertanyaan awal tidak jelas apakah mereka perlu menghapus semuanya atau tidak.
Mark B

9
Menghapus file preferensi tampaknya tidak benar-benar menghapusnya. Dalam pengujian saya sendiri dengan menonton penggunaan "Data" yang tercantum di panel App Info, membuat file SharedPreference baru menambahkan 4KB ke nilai ini tetapi menggunakan editor.clear (). Commit () tidak mengurangi angka.
Code Commander

2
@rubdottocom Mengapa Anda tidak menaruh komentar Anda sebagai jawaban terpisah?
technophyle

10
@rubdottocom lebih baik menggunakan .apply () daripada .commit ()
Juan Aguilar Guisado

173

Solusi saya:

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

2
Apakah itu hanya menghapus variabel TEKS?
Si8

3
@ SiKni8 Ya, itu hanya menghapus pasangan kunci / nilai dengan kunci "text".
Dennis

Saya bisa membuatnya bekerja karena sudah lama tetapi terima kasih atas tanggapannya :)
Si8

Anda menyelamatkan kewarasan mutlak saya. : P TERIMA KASIH. Saya mencoba untuk menghapus prefs untuk satu elemen objek sekaligus, dan ini bekerja dengan indah.
Azurespot

3
Pertimbangkan untuk menggunakan apply () daripada commit () untuk melakukan tugas di utas latar belakang.
Zon

124

Menghapus semua preferensi:

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

Menghapus preferensi tunggal:

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

1
Apa yang akan terjadi KeyName?
hasnain_ahmad

2
Bagaimana cara menghapus seluruh file preferensi, bukan hanya preferensi di dalam file?
Srikar Reddy

Gunakan apply () alih-alih komit () untuk melakukan tugas di utas latar belakang. komit () memblokir dan menulis data ke penyimpanan secara instan. apply () tidak sinkron.
Vaibhav

64

Jika tidak perlu dihapus setiap kali, Anda dapat menghapusnya secara manual dari:

Pengaturan -> Aplikasi -> Kelola aplikasi -> (pilih aplikasi Anda) -> Bersihkan data atau Hapus instalasi

Versi Android yang lebih baru:

Pengaturan -> Aplikasi -> (pilih aplikasi Anda) -> Penyimpanan -> Hapus data dan Hapus cache


5
dapatkah kita melakukan hal-hal ini secara terprogram.
amity

@ amity Jawaban lain melakukannya secara terprogram.
Doomsknight

31
Terima kasih untuk opsi yang tidak terprogram.
CorayThan

2
@ amity - Beberapa dari kita membutuhkan jawaban ini. Saya tidak yakin bagaimana menghapus SharedPrefs pada Android Emulator sehingga saya dapat terus menguji kode saya.
TJ Biddle

1
Tidak ada di android studio 2.2.2 10/18/2016.
Robin suka burung

26

Menghapus Preferensi Bersama Android dalam satu baris :-)

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

Atau applyuntuk operasi asinkron yang tidak memblokir:

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

Solusi terbaik untuk saya. Ada beberapa kasus ketika sinkron diperlukan untuk konten preferensi bersama.
Juan Aguilar Guisado

19

Tampaknya semua solusi tidak sepenuhnya berfungsi atau mati

untuk menghapus semua SharedPreferences dalam suatu Kegiatan

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

Sebut ini dari Kegiatan Utama setelah onCreate

note * i digunakan .apply()alih-alih .commit(), Anda bebas memilih commit ();


persis apa yang saya inginkan. Terima kasih itu menghapus semua preferensi default
Arpit Patel

11

Anda dapat menggunakan adb shell untuk melakukan ini bahkan tanpa ponsel yang di-rooting. Satu-satunya tangkapan adalah aplikasi tersebut harus dapat debuggable.

run-as <your package name> <command>

Sebagai contoh:

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

Atau, Anda bisa melakukan hal di atas tetapi tanpa perintah yang akan mengarahkan Anda ke root paket aplikasi dan memungkinkan Anda untuk mengeksekusi lebih banyak perintah dalam konteks aplikasi.


1
+1 untuk kiat bermanfaat aktif run-as. Anda akan berpikir saya akan menemukan ini setelah 3 tahun ...
Richard Le Mesurier

Ini bukan Sharedpreferences, ini database sqlite
OneCricketeer

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

9

Pada API 24 (Nougat) Anda bisa melakukan:

context.deleteSharedPreferences("YOUR_PREFS");

Namun, tidak ada kompatibilitas ke belakang, jadi jika Anda mendukung sesuatu yang kurang dari 24, tetap dengan:

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

9

Bersihkan semuanya:

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

8

Anda juga dapat menghapus aplikasi secara manual menggunakan perangkat Anda. Kemudian ketika Anda menginstal ulang aplikasi Anda, preferensi bersama telah diatur ulang.


Terima kasih - saya tidak ingin secara terprogram menghapus sharedPreferences jadi ini bekerja untuk saya.
Simon

Di perangkat saya, saya memiliki opsi untuk "menghapus data" pada opsi hapus instalan, yang berfungsi untuk saya dan menghapus kebutuhan untuk menginstal ulang aplikasi saya.
G O'Rilla

8

Dalam definisi kelas:

private static final String PREFERENCES = "shared_prefs";

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

Di dalam kelas:

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

7

Coba kode ini:

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

5

Jika ini untuk pengujian Anda. Anda dapat menggunakan perintah adb.

adb shell pm clear <package name>

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

Ini akan menghapus preferensi bersama yang disimpan dengan nama "someTag".


3
  • Untuk menghapus nilai tertentu,

SharedPreferences.Editor menghapus (String string) diikuti oleh commit () atau apply ()

  • Untuk menghapus semua nilai,

    SharedPreferences.Editor menghapus () diikuti oleh commit () atau apply ()


3

Untuk menghapus pasangan nilai kunci dari preferensi, Anda dapat dengan mudah melakukan hal berikut

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

Saya juga telah mengembangkan perpustakaan untuk memudahkan manipulasi preferensi bersama. Anda dapat menemukan tautan berikut

https://github.com/farruhha/SimplePrefs


2

Untuk menghapus semua SharedPreferences secara terpusat dari kelas mana pun:

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

Dan dari kelas mana pun: (komit mengembalikan Boolean tempat Anda dapat memeriksa apakah Preferensi Anda dihapus atau tidak)

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

Atau Anda bisa menggunakan berlaku; mengembalikan batal

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

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

Saya dapat menghapus file dalam preferensi bersama dengannya


Semua solusi di atas salah, hanya menghapus file yang benar untuk menghapus preferensi bersama
Dreamer

1

Tidak ada jawaban yang berfungsi untuk saya karena saya memiliki banyak tombol preferensi bersama.

Katakanlah Anda menjalankan Tes Android daripada tes unit.

Ini berfungsi untuk saya loop dan menghapus semua file shared_prefs .

@BeforeClass akan berjalan sebelum semua tes dan 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();
    }
}

0

Cara Kotlin ktx untuk menghapus semua preferensi:

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

Klik di sini untuk semua operasi preferensi Bersama dengan contoh


-2

Anda dapat menggunakan preferences.edit().remove("key").commit()untuk menghapus nilai yang disimpan dari preferensi bersama.


-6

Lakukan saja pagi ini. Dari prompt perintah:

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

CATATAN : Ini membutuhkan perangkat yang di-rooting seperti stok perangkat virtual Android, perangkat Genymotion, atau handset / tablet yang sudah di-root, dll.


9
Jadi siapa pun yang memilih solusi ini mungkin juga harus menjelaskan alasannya: Anda memerlukan ponsel yang di-rooting untuk mengakses /data/datasecara langsung!
nuala

3
Anda perlu Menghapus SharedPreferences dari Aplikasi dan bukan pada ADB Shell. Hal ini dilakukan dengan menggunakan: SharedPreferences.edit (). Clear (). Commit ();
ThePunisher

Ditanya tidak pernah mengatakan mereka menginginkan solusi tanpa root. Ada kesalahan teknis di sini; karena metode ini membutuhkan root, Anda harus menjalankan susetelah adb shellmembuka shell istimewa.
Anubian Noob

Mengapa hal ini begitu diremehkan? Ini adalah jawaban yang berguna dan yang saya cari.
Matt D
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.