2017-06-23 2 views
-1

J'ai une classe A cette classe ne s'étend pas ou n'implémente aucune autre classe. J'ai alors une classe B, cette classe ne s'étend pas non plus et n'implémente aucune autre classe.Impossible d'initialiser SharedPreferences

ma classe B est utilisé uniquement pour gérer SharedPreferences:

private static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 

Voici la méthode de problème dans la classe B:

public static void setCurrentUsersEmail(String email){ 
    sharedPreferences.edit().putString("userEmail",email).commit(); 
} 

Maintenant la classe A est un gestionnaire de base de données et a besoin de stocker les utilisateurs email au SharedPreferences pour un usage ultérieur. Je le fais avec le code suivant: `

MySharedPrefs.setCurrentUsersEmail(currentUsersEmail); 

Cependant, lorsque je tente exécuter le code dans la classe A je reçois l'erreur:

java.lang.ExceptionInInitializerError at com.test.Android.MySharedPrefs.setCurrentUsersEmail(MySharedPrefs.java:0)

Je suis vraiment confus quant à pourquoi cela arrive, je ne pourrais pas Ne pas trouver une solution en ligne après la recherche non plus, j'utilise ma classe sharedPreferences dans d'autres activités parfaitement bien. Est-ce un problème d'activité?

Toute aide est très appréciée.

+0

comment vous passez 'mContext' dans' getDefaultSharedPreferences() 'méthode – Aryan

+0

Donc J'appelle 'setCurrentUsersEmail (currentUsersEmail)' depuis un adaptateur recyclerview. Cela passe ensuite à la classe A où la base de données est vérifiée, puis le SharedPreferences est appelé. Lorsque sharedPreferences est créé à l'origine, j'appelle une méthode de MainActivity pour obtenir ses données de contexte. Je ne pense pas que le contexte est envoyé dans cette instance si – memoryManagers

Répondre

0

Vous pouvez utiliser singleton pour vos besoins:

public class MyPrefs { 

    private static MyPrefs myPrefs; 
    private SharedPreferences sharedPreferences; 

    private MyPrefs(Context context){ 

     sharedPreferences=context.getSharedPreferences("MyPREFERENCES", Context.MODE_PRIVATE); 
    } 

    public static MyPrefs getInstance(Context context){ 

     if(myPrefs==null) 
      myPrefs=new MyPrefs(context); 
     return myPrefs; 
    } 

    public void setCurrentUsersEmail(String email){ 

     sharedPreferences.edit().putString("userEmail",email).commit(); 
    } 
} 

Vous pouvez mettre email ainsi:

MyPrefs.getInstance(context).setCurrentUsersEmail(currentUsersEmail); 

Vous devez passer contexte à la première fois pour la référence de sharedPreferences dans votre classe .

ou

De l'appel d'activité MyPrefs.getInstance(context) à la fois

Ensuite, vous pouvez appeler sans contexte

MyPrefs.getInstance().setCurrentUsersEmail(currentUsersEmail); 

méthode getInstance():

public static MyPrefs getInstance(){ 

     if(myPrefs==null) throw new AssertionError("MyPrefs cannot be null"); 
     else 
     return myPrefs; 
} 
+1

Merci cela a fonctionné.Pourriez-vous s'il vous plaît expliquer pourquoi il ne parvient pas à obtenir sharedPreferencces de MainActivity dans ce cas? – memoryManagers

+0

Tout d'abord, la variable statique doit être initialisée dans un bloc statique et ** PreferenceManager ** -> Utilisé pour aider à créer des hiérarchies de préférence à partir d'activités ou XML et ** SharedPreferences ** -> Interface pour accéder et modifier les données de préférences renvoyées par getSharedPreferences (String , int). Pour un ensemble particulier de préférences, il existe une instance unique de cette classe que tous les clients partagent. – Aryan

+0

'PreferenceManager' est normalement utilisé lorsque vous voulez créer un PreferenceActivity ou charger dans certaines préférences à partir d'un fichier .xml dans votre application avec des valeurs par défaut, et détient son propre référencé à SharedPreferences – Aryan

0

Vous pouvez faire cela, dans toute activité, ne pas avoir besoin de créer une nouvelle méthode:

Pour enregistrer:

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
editor.putString("email", "[email protected]"); 
editor.commit(); 

Pour restaurer:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String restoredText = prefs.getString("email", null); 

Tu ne peux pas MesPrefs d'appel. aFunctionYouCreated() !!!