Próbuję odczytać SharedPreferences wewnątrz fragmentu. Mój kod jest tym, czego używam do uzyskiwania preferencji w innych działaniach.
SharedPreferences preferences = getSharedPreferences("pref", 0);
Otrzymuję błąd
Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper
Próbowałem skorzystać z tych linków, ale bez powodzenia Dostęp do SharedPreferences za pomocą metod statycznych i Static SharedPreferences . Dziękuję za rozwiązanie.
this
słowo kluczowe jest potrzebne podczas wykonywaniathis.getActivity().getShared..
?Zaznaczona odpowiedź nie zadziałała dla mnie, musiałem użyć
EDYTOWAĆ:
Lub po prostu spróbuj usunąć
this
:SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
źródło
Uwaga: ta odpowiedź udzielona przez mojego użytkownika jest poprawna.
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);
Jeśli jednak spróbujesz pobrać cokolwiek z fragmentu przed wywołaniem metody onAttach getActivity (), zwróci wartość null.
źródło
Możesz sprawić, że
SharedPrefences
wonAttach
metodzie fragment tak:@Override public void onAttach(Context context) { super.onAttach(context); SharedPreferences preferences = context.getSharedPreferences("pref", 0); }
źródło
To załatwiło sprawę dla mnie
Sprawdź tutaj https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs
źródło
getActivity()
ionAttach()
nie pomogło mi w tej samej sytuacji,może zrobiłem coś złego,
ale! Znalazłem inną decyzję
Utworzyłem pole
Context thisContext
w moim fragmencieI otrzymałem bieżący kontekst z metody onCreateView
i teraz mogę pracować z udostępnionym pref z fragmentu
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... thisContext = container.getContext(); ... }
źródło
Aby zdefiniować preferencje we fragmencie:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();
Aby wywołać inną czynność lub podzielić dane preferencji:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...
źródło
Możliwe jest pobranie kontekstu z pliku
Fragment
Po prostu zrób
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; } }
Możesz również dołączyć
AndroidViewModel
wonCreateView
metodzie, która implementuje metodę, która zwraca kontekst aplikacjipublic 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 } }
źródło
Może to komuś przyda się po kilku latach. Nowym sposobem dostania się do
SharedPreferences()
wnętrza fragmentu na Androidx jest implementacja dogradle dependencies
implementation "androidx.preference:preference:1.1.1"
a następnie wewnętrzne wywołanie fragmentu
źródło
użyj wymaganej aktywności we fragmencie kotlin
val sharedPreferences = requireActivity().getSharedPreferences(loginmasuk.LOGIN_DATA, Context.MODE_PRIVATE)
źródło