SharedPreferences'dan bazı anahtar / değer çiftleri nasıl kaldırılır?


92

SharedPreferences'dan bazı anahtar / değer çiftleri nasıl kaldırılır? Ben koydum ve bunu tercihlerden kaldırıyorum.

Yanıtlar:


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

Burada düzenleyici, sharedPreferences düzenleyicisidir.


11
Bu cevaba küçük bir ek. Android belgelerinden: "Dönüş değerini önemsemiyorsanız ve bunu uygulamanızın ana iş parçacığından kullanıyorsanız bunun yerine apply () kullanmayı düşünün."
Sreedevi J

3
@silwar, başvuruyu () bir commit () için neden yeniden düzenlediniz? dokümantasyon biz dönüş değeri ile çalışmak istiyorum ve sürece) (uygulamak kullanmayı diyor bilerek soru veya bu durumda içine cevabı uyan ne
Salim Mahboubi

13

Commit () çağrısının dönüş değeri ile bir şey yapmayı planlamıyorsanız, zaman uyumsuz apply () çağrısı yerine senkronize commit () çağrısını kullanmak için kesinlikle hiçbir neden olmadığını unutmamak önemlidir.

Bunu ana / UI iş parçacığından çağırıyorsanız, commit () tamamlanana kadar kullanıcı arabiriminin engelleneceğini unutmayın. Bu, uygulama için yaklaşık 5 ms'ye uygulandığında yaklaşık 100 ms kadar sürebilir. Bu çok fazla görünmeyebilir, ancak bir uygulama boyunca sürekli olarak yapılırsa, kesinlikle artacaktır.

Öyleyse, böyle bir şey yapmayı planlamıyorsanız, umarım ayrı bir başlıkta:

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

Bunun yerine şunu yapmalısın:

editor.remove(String key); 
editor.apply();

Her yerde commit ve apply'ın ne zaman kullanılacağına dair iyi (gerçek dünya) bir açıklama arıyordum. Bu, noktayı net bir şekilde yönlendirir.
XMAN

9
SharedPreferences.Editor.remove(key) 
commit();

1
Remove yönteminden dönüş değerini kullanmazsanız ve bunu uygulamanızın ana iş parçacığından kullanıyorsanız, bunun yerine apply () kullanmayı düşünün.
kartik srivastava

9

Çok basit:

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

3

İşte bu sorunu nasıl çözdüğüm.

Önce şu şekilde bir SharedPreference örneği oluşturdum

SharedPreferences mobilePreference;

sonra bu paylaşılan Tercihi kullandım

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

Burada "in.bhartisoftwares.amit.allamitappsthree" benim paket adımdır ve Context.MODE_PRIVATE kullanıyorum, çünkü bu paylaşılan tercihi yalnızca bu paket adı için değiştirmek istiyorum.

Ardından, seçili sharedPreference'i (paylaşılan Tercihimin anahtarı mobileString'dir) aşağıdaki gibi siliyorum:

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

Aşağıdaki kodun tamamına bakın:

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

1

Bilgi

Sadece kontrol sharedprefsınıfı genişletildi, Mapbu yüzden removeyöntem var

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

Burada düzenleyici, sharedPreferences düzenleyicisidir.

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.