web-dev-qa-db-fra.com

Android SharedPreferences in Fragment

J'essaie de lire les références partagées à l'intérieur de Fragment. Mon code est ce que j'utilise pour obtenir des préférences dans toute autre activité.

     SharedPreferences preferences = getSharedPreferences("pref", 0);

J'ai une erreur

    Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper    

J'ai essayé de suivre ces liens mais sans succès Accès à SharedPreferences par des méthodes statiques et Static SharedPreferences . Merci pour toute solution.

74
Mark

La méthode getSharedPreferences est une méthode de l'objet Context. Il ne suffit donc pas d'appeler getSharedPreferences à partir d'un Fragment car ce n'est pas un contexte! (L'activité étant une extension du contexte, nous pouvons appeler getSharedPreferences depuis celui-ci).

Donc, vous devez obtenir votre contexte d'applications par

// this = your fragment
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
211
Jug6ernaut

La réponse marquée ne fonctionnait pas pour moi, je devais utiliser

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());

MODIFIER:

Ou essayez simplement de supprimer le this:

SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
10
Leon

Par prudence, la réponse fournie par l’utilisateur situé au-dessus de moi est correcte.

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);

Cependant, si vous tentez de récupérer quelque chose dans le fragment avant d'appeler onAttach, getActivity () renverra la valeur null.

7
ed209

Cela a fait le tour pour moi

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());

Vérifiez ici https://developer.Android.com/guide/topics/ui/settings.html#ReadingPrefs

1

getActivity() et onAttach() ne m'ont pas aidé dans la même situation
Peut-être que j'ai fait quelque chose de mal
mais! J'ai trouvé une autre décision
J'ai créé un champ Context thisContext à l'intérieur de mon fragment
Et obtient un contexte actuel de la méthode onCreateView
et maintenant je peux travailler avec pref partagé à partir de fragment

public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {   
...   
thisContext = container.getContext();   
...   
}
1
Kirguduck

Vous pouvez créer la méthode SharedPrefences dans onAttach de fragment comme ceci:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    SharedPreferences preferences = context.getSharedPreferences("pref", 0);
}
1
misbahm3

Pour définir la préférence dans Fragment:SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();

Pour appeler une autre activité ou fragmenter les données de préférence:SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...

0
user11809346