2014-06-18 36 views
6

Tüm yanıtları burada buldum ve tüm çözümleri denedim, yine de paylaşılan prefs'im kalıcı değil. Ben de denedimPaylaşılan Tercihler uygulama yeniden başlatıldıktan sonra kalıcı değil

public static void setActivated(boolean activated) { 
    SharedPreferences sp = Utils.getContext().getSharedPreferences(
      USER_PREFS, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sp.edit(); 
    editor.putBoolean(ASD, activated); 
    editor.commit(); 
} 

public static boolean isActivated() { 
    SharedPreferences sp = Utils.getContext().getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE); 
    return sp.getBoolean(ASD, true); 
} 

: Burada

kodum var

editor.clear(); 
editor.put .. 
editor.commit(); 

Ben de bile .apply hem çalıştı

editor.apply(); 

ile denedim() ve .commit() ve hayır şans.

başka bir fikir dosyaları için farklı modu kullanmayı deneyin oldu:

...getSharedPreferences(USER_PREFS, Context.MODE_MULTI_PROCESS); 

sorun kaydedilen değerler kalıcı değildir olmasıdır. Uygulamayı kapatırsam ve tekrar açarsam değerler yanlıştır.

Herhangi bir fikri olan var mı? Ayrıca sorunun sadece bazı cihazlarda, örneğin HTC One S, Samsung Galaxy S3 (farklı bir S3 üzerinde test ettim ve mükemmel bir şekilde çalıştı) olduğunu belirtmek isterim.

DÜZENLEME: Bir düğme tıklatma dinleyicisindeki kaydetmeyi çağırıyorum ve parçayı yüklediğimde (etkinleştirildikten sonra onViewCreated()) devre dışı bırakıyorum.

Teşekkürler! düzenleyicide

+0

bu bir bakınız: http: aynı sorun olması //stackoverflow.com/questions/23654853/radiobuttons-and-spinners-in-shared-preferences/23655104#23655104 –

+0

... Sorunun fark etmiş Yalnızca işlem hala devam ederken (DDMS'ye göre) uygulamayı yeniden başlatırsam olur - bu durumda bazı ayrı tercih dosyaları kullanılır. İşlemi DDMS'de öldürür ve sonra yeniden başlatırsam sorun olmaz ... – Lez77

cevap

2
public abstract SharedPreferences.Editor clear() 

Eklendi API seviyesi 1 Puan tercihlerinden tüm değerleri kaldırmak için. Taahhüt çağrıldıktan sonra, kalan tek tercihler , bu düzenleyicide tanımladığınız herhangi bir şey olacaktır. tercihlere geri döndüğünde, temizleyicinin bu düzenleyicide üzerine koyma yöntemlerinden önce veya sonra aradığınızdan bağımsız olarak temizlendiğini unutmayın.

İade Aynı Düzenleyici nesnesine bir başvuru döndürür, böylece zincir arayarak çağrıları bir araya getirebilirsiniz. Benim kullanıcı tercihleri ​​sınıfta

Ben başka dizeleri üzerinde boş bir değer elde edildi ve benim kod aşağıdaki gibi bir şeydi:

SharedPreferences sp = Utils.getContext() 
    .getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sp.edit(); 
if (session != null && !"".equals(session)) { 
    sessionId = session; 
    editor.putString(SESSION, sessionId).commit(); 
} else { 
    sessionId = null; 
    editor.clear().commit(); 
} 

editor.clear() bütün diğer hareketin sıfırlama oldu!

+0

Bu nasıl yardımcı olur? Yazar editor.clear() ile birlikte denediğini söyledi. Ben de editor.clear() çağırmadan aynı sorunu var ... – Lez77

0

Nedenini bilmiyorum, ama sadece zaman uyumsuz görev içinde senin prefs kod koyarak çalışıyor :

( )
private static class AsyncSave extends AsyncTask<Void, Void, Boolean> { 
    String favNamesList; 

    AsyncSave(String favNamesList) { 
     this.favNamesList = favNamesList; 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     prefss.edit().putString("favNamesList", strings).apply(); 
     return null; 
    } 
}