Bagaimana cara menghapus beberapa pasangan kunci / nilai dari SharedPreferences?

91

Bagaimana cara menghapus beberapa pasangan kunci / nilai dari SharedPreferences? Saya telah menempatkan dan saya untuk menghapusnya dari prefs.

Damir
sumber

Jawaban:

218
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();

Di sini editor adalah editor sharedPreferences.

Yashwanth Kumar
sumber
11
Tambahan kecil untuk jawaban ini. Dari dokumentasi android: "Jika Anda tidak peduli dengan nilai kembalian dan Anda menggunakan ini dari thread utama aplikasi Anda, pertimbangkan untuk menggunakan apply () sebagai gantinya."
Sreedevi J
3
@silwar, mengapa Anda mengedit apply () kembali ke commit ()? mengetahui bahwa dokumentasi mengatakan untuk menggunakan apply () kecuali kita ingin bekerja dengan nilai pengembalian, dan tidak ada pertanyaan atau jawaban yang cocok dengan kasus itu
Salim Mahboubi
13

Penting untuk diperhatikan bahwa, kecuali Anda berencana melakukan sesuatu dengan nilai kembalian dari panggilan commit (), sama sekali tidak ada alasan untuk menggunakan panggilan sinkronus () daripada panggilan apply () asinkron.

Perlu diingat bahwa jika Anda memanggil ini dari utas utama / UI, UI diblokir hingga commit () selesai. Ini bisa memakan waktu hingga sekitar 100 md seperti yang diterapkan ke sekitar 5 md untuk pengajuan. Itu mungkin tidak terlihat banyak, tetapi jika dilakukan terus menerus di seluruh aplikasi, itu pasti akan bertambah.

Jadi, kecuali Anda berencana melakukan sesuatu seperti ini, semoga di utas terpisah:

editor.remove(String key); 
boolean success = editor.commit();
if (!success) { 
    // do something 
}

Anda seharusnya melakukan ini:

editor.remove(String key); 
editor.apply();
SBerg413
sumber
Saya telah mencari-cari penjelasan (dunia nyata) yang bagus tentang kapan harus menggunakan commit vs apply. Ini menjelaskan maksudnya dengan jelas.
XMAN
9
SharedPreferences.Editor.remove(key) 
commit();
Shailendra Singh Rajawat
sumber
1
Jika Anda tidak menggunakan nilai hasil dari metode remove, dan Anda menggunakan ini dari thread utama aplikasi Anda, pertimbangkan untuk menggunakan apply () sebagai gantinya.
kartik srivastava
9

Sangat sederhana:

private SharedPreferences sharedPreferences() {
    return PreferenceManager.getDefaultSharedPreferences(mContext);
}

public void clearSharedPreferences() {
    sharedPreferences()
            .edit()
            .remove(SOME_KEY_1)
            .remove(SOME_KEY_2)
            .remove(SOME_KEY_3)
            .apply();
}
Antônio Sérgio Ferraz
sumber
3

Inilah cara saya mengatasi masalah ini.

Pertama saya membuat sebuah instance dari SharedPreference sebagai

SharedPreferences mobilePreference;

lalu saya menggunakan sharedPreference ini sebagai

mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);

Di sini "in.bhartisoftwares.amit.allamitappsthree" adalah nama paket saya dan saya menggunakan Context.MODE_PRIVATE, karena saya ingin memanipulasi preferensi bersama ini hanya untuk nama paket ini.

Kemudian saya menghapus sharedPreference yang dipilih (kunci sharedPreference saya adalah mobileString) sebagai berikut:

mobilePreference.edit().remove("mobileString").commit();

Lihat kode lengkapnya di bawah ini:

SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
    mobilePreference.edit().remove("mobileString").commit();
Amit Mhaske
sumber
1

Informasi

Cukup periksa sharedprefkelas diperpanjang untuk Mapitu mengapa ada removemetode

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();

Di sini editor adalah editor sharedPreferences.

Yogesh Rathi
sumber