2017-10-17 30 views
-4

J'essaie de sauvegarder un booléen dans les préférences partagées avec une valeur de vrai mais quand je le connecte je le vois en retournant un faux valeur. S'il vous plaît voir le code ci-dessous et gardez à l'esprit que ce code est dans un fragment.Je m'attends à ce que mon booléen soit sauvegardé dans les préférences partagées comme vrai, mais il enregistre toujours comme faux

SharedPreferences AppPreferences = getActivity().getSharedPreferences("myPrefs", Activity.MODE_PRIVATE); 
     boolean propertyManagerLoggedIn = AppPreferences.getBoolean(PROPERTYMANAGER_LOGGEDIN, false); 

     if(!propertyManagerLoggedIn) 
     { 
     SharedPreferences.Editor editor = AppPreferences.edit(); 
     transitionInterface.showDashboardIcons(); 
     AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
     editor.commit(); 
     //boolean vlaue = prefs.getbooleanflag(context, false); 
     Log.d("tag",""+propertyManagerLoggedIn); 

     } 
    else 
     { 

     Log.d("tag",""+propertyManagerLoggedIn); 
     } 

et ci-dessous sont les lignes pertinentes de code de ma classe AppPreferences

public final static String PROPERTYMANAGER_LOGGEDIN = "PROPERTYMANAGER_LOGGEDIN"; 

    public static boolean propertyManagerLoggedn(Context context) 
    { 
     TinyDB settings = new TinyDB(context); 
     return settings.getBoolean(AppPreferences.PROPERTYMANAGER_LOGGEDIN); 
    } 

Répondre

2

chaque fois que vous appelez edit() un nouveau Editor est retourné à vous. En conséquence à la documentation

Créer un nouvel éditeur pour ces préférences, à travers lequel vous pouvez faire modifications aux données dans les préférences et atomiquement ces changements engager à l'objet SharedPreferences.

de sorte que vous pouvez faire

AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true).commit(); 

ou

editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
editor.commit(); 

mais appelant putBoolean sur une instance et commit sur un autre ne sera pas utile probablement

0

Vous appelez commit sur une instance différente. Fondamentalement AppPreferences.edit() vous donnera une nouvelle instance.

AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 

Ceci est une autre instance dans laquelle vous mettez la valeur booléenne.

Utilisez la même instance que vous avez créée. Votre code devrait ressembler à ceci:

SharedPreferences.Editor editor = AppPreferences.edit(); 
     transitionInterface.showDashboardIcons(); 
     editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true); 
     editor.commit(); 
+0

Merci de me laisser essayer. Je soupçonne également que la façon dont je le déclare dans les préférences d'application est fausse. Quelle est la bonne façon de le déclarer afin que je puisse y accéder – Zidane