Я пытаюсь прочитать SharedPreferences внутри фрагмента. Мой код - это то, что я использую для получения предпочтений в любом другом действии.
SharedPreferences preferences = getSharedPreferences("pref", 0);
Я получаю ошибку
Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper
Я попытался перейти по этим ссылкам, но безуспешно. Доступ к SharedPreferences с помощью статических методов и Static SharedPreferences . Спасибо за любое решение.
this
ключевое слово необходимо при выполненииthis.getActivity().getShared..
?Отмеченный ответ у меня не сработал, пришлось использовать
РЕДАКТИРОВАТЬ:
Или просто попробуйте удалить
this
:SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
источник
В качестве предостережения этот ответ, предоставленный указанным мной пользователем, является правильным.
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);
Однако, если вы попытаетесь получить что-либо во фрагменте до вызова onAttach, getActivity () вернет значение null.
источник
Вы можете сделать
SharedPrefences
вonAttach
методе фрагмента , как это:@Override public void onAttach(Context context) { super.onAttach(context); SharedPreferences preferences = context.getSharedPreferences("pref", 0); }
источник
Это помогло мне
Отметьте здесь https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs
источник
getActivity()
иonAttach()
не помог мне в той же ситуации,возможно, я сделал что-то не так,
но! Я нашел другое решение,
я создал поле
Context thisContext
внутри своего фрагментаи получил текущий контекст из метода onCreateView,
и теперь я могу работать с общим префиксом из фрагмента
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... thisContext = container.getContext(); ... }
источник
Чтобы определить предпочтение во фрагменте:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();
Чтобы вызвать другое действие или фрагментировать данные предпочтений:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...
источник
Можно получить контекст из
Fragment
Просто делать
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; } }
Вы также можете добавить
AndroidViewModel
вonCreateView
метод, который реализует метод, который возвращает контекст приложения.public 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 } }
источник
Может быть, это поможет кому-то через несколько лет. Новый способ проникновения
SharedPreferences()
внутрь фрагмента на Androidx - реализовать вgradle dependencies
implementation "androidx.preference:preference:1.1.1"
а затем внутри вызова фрагмента
источник
использовать requiredactivity во фрагменте kotlin
val sharedPreferences = requireActivity().getSharedPreferences(loginmasuk.LOGIN_DATA, Context.MODE_PRIVATE)
источник