2017-02-21 3 views
2

ci-dessous est mon code pour créer pref partagépartagé Préf retour valeur incorrecte dans certains appareils haut de gamme comme Samsung

public SaveData(Context con) { 
    this.context = con; 
    emailSharedPreferences = context.getSharedPreferences(KEY_PREF_EMAIL, Context.MODE_PRIVATE); 
    emailEdit = emailSharedPreferences.edit(); 
} 

pour les données ensemble

public void setData(boolean accepted) { 
    emailEdit = emailSharedPreferences.edit(); 
    emailEdit.putBoolean(KEY, accepted); 
    emailEdit.apply(); 
} 

pour obtenir des données

public Boolean getData() { 
    emailSharedPreferences = context.getSharedPreferences(KEY_PREF_EMAIL, Context.MODE_PRIVATE); 
    return emailSharedPreferences.getBoolean(KEY, false); 
} 

À l'écran de mon lanceur d'applications lorsque j'essaie d'obtenir des données, il retourne "vrai" sur certains appareils.

Maintenant, si j'ai créé pref partagé par le code ci-dessous

private static SharedPreferences getPreferences(Context context) { 
    // return context.getSharedPreferences(PREF_NAME, MODE); 
    return PreferenceManager.getDefaultSharedPreferences(context); 

} 

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

Pour les données établies

public static void setData(Context context,boolean value){ 
    try { 
     getEditor(context).putBoolean(KEY, value).commit(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

pour obtenir des données

public static boolean getData(Context context){ 
    try { 
     return getPreferences(context).getBoolean(KEY, false); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

maintenant il fonctionne bien sur tous les appareils. Quelqu'un peut-il expliquer pourquoi cela se produit?

+0

Lors de l'utilisation de commit(), les données sont immédiatement écrites dans le stockage, lors de l'utilisation de apply(), elles sont uniquement écrites dans le cache. –

+0

J'ai utilisé à la fois la validation et l'application des deux. mais ne fonctionne pas pour moi –

Répondre

0

Utilisez ce

emailEdit.commit();

après cette

emailEdit.putBoolean (KEY, acceptée);