J'essaye de lire SharedPreferences dans Fragment. Mon code est ce que j'utilise pour obtenir des préférences dans toute autre activité.
SharedPreferences preferences = getSharedPreferences("pref", 0);
Je reçois 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 chance d' accéder à SharedPreferences via des méthodes statiques et Static SharedPreferences . Merci pour toute solution.
this
mot clé est-il nécessaire lors de l'exécutionthis.getActivity().getShared..
?La réponse marquée n'a pas fonctionné pour moi, j'ai dû utiliser
ÉDITER:
Ou essayez simplement de supprimer
this
:SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
la source
En guise de mise en garde, cette réponse fournie par l'utilisateur ci-dessus est correcte.
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);
Cependant, si vous essayez d'obtenir quelque chose dans le fragment avant que onAttach ne soit appelé, getActivity () renverra null.
la source
Vous pouvez créer la méthode
SharedPrefences
inonAttach
du fragment comme ceci:@Override public void onAttach(Context context) { super.onAttach(context); SharedPreferences preferences = context.getSharedPreferences("pref", 0); }
la source
Cela a fait l'affaire pour moi
Vérifiez ici https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs
la source
getActivity()
et neonAttach()
m'a pas aidé dans la même situationpeut-être que j'ai fait quelque chose de mal
mais! J'ai trouvé une autre décision,
j'ai créé un champ
Context thisContext
dans mon fragmentet j'ai obtenu un contexte actuel de la méthode onCreateView
et maintenant je peux travailler avec la préférence partagée à partir du fragment
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... thisContext = container.getContext(); ... }
la source
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)...
la source
Il est possible d'obtenir un contexte à partir d'un
Fragment
Fais juste
public class YourFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View root = inflater.inflate(R.layout.yout_fragment_layout, container, false); // get context here Context context = getContext(); // do as you please with the context // if you decide to go with second option SomeViewModel someViewModel = ViewModelProviders.of(this).get(SomeViewModel.class); Context context = homeViewModel.getContext(); // do as you please with the context return root; } }
Vous pouvez également joindre un
AndroidViewModel
dans laonCreateView
méthode qui implémente une méthode qui renvoie le contexte de l'applicationpublic class SomeViewModel extends AndroidViewModel { private MutableLiveData<ArrayList<String>> someMutableData; Context context; public SomeViewModel(Application application) { super(application); context = getApplication().getApplicationContext(); someMutableData = new MutableLiveData<>(); . . } public Context getContext() { return context } }
la source
Peut-être que cela peut aider quelqu'un après quelques années. Une nouvelle façon, sur Androidx, d'accéder
SharedPreferences()
à un fragment est de l'implémenter dansgradle dependencies
implementation "androidx.preference:preference:1.1.1"
puis, à l'intérieur de l'appel de fragment
la source
utiliser l'activité requise dans le fragment kotlin
val sharedPreferences = requireActivity().getSharedPreferences(loginmasuk.LOGIN_DATA, Context.MODE_PRIVATE)
la source