Estou tentando ler SharedPreferences dentro do Fragment. Meu código é o que eu uso para obter preferências em qualquer outra atividade.
SharedPreferences preferences = getSharedPreferences("pref", 0);
Eu recebo erro
Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper
Tentei seguir esses links, mas sem sorte acessando SharedPreferences por meio de métodos estáticos e Static SharedPreferences . Obrigado por qualquer solução.
this
palavra - chave é necessária ao fazerthis.getActivity().getShared..
?A resposta marcada não funcionou para mim, eu tive que usar
EDITAR:
Ou apenas tente remover
this
:SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
fonte
Como observação, esta resposta fornecida pelo usuário acima de mim está correta.
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);
No entanto, se você tentar obter qualquer coisa no fragmento antes de onAttach ser chamado de getActivity (), retornará nulo.
fonte
Você pode fazer o método
SharedPrefences
inonAttach
de fragmento como este:@Override public void onAttach(Context context) { super.onAttach(context); SharedPreferences preferences = context.getSharedPreferences("pref", 0); }
fonte
Isso funcionou para mim
Verifique aqui https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs
fonte
getActivity()
eonAttach()
não me ajudou na mesma situaçãotalvez eu tenha feito algo errado
mas! Eu encontrei outra decisão
Eu criei um campo
Context thisContext
dentro do meu Fragmente peguei um contexto atual do método onCreateView
e agora posso trabalhar com pref compartilhada do fragmento
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... thisContext = container.getContext(); ... }
fonte
Para definir a preferência em Fragment:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();
Para chamar outra atividade ou fragmentar os dados de preferência:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...
fonte
É possível obter um contexto de dentro de um
Fragment
Apenas faça
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; } }
Você também pode anexar um
AndroidViewModel
noonCreateView
método que implementa um método que retorna o contexto do aplicativopublic 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 } }
fonte
Talvez isso seja útil para alguém depois de alguns anos. Uma nova maneira, no Androidx, de obter
SharedPreferences()
fragmentos internos é implementar emgradle dependencies
implementation "androidx.preference:preference:1.1.1"
e então, dentro da chamada do fragmento
fonte
use a atividade necessária no fragmento kotlin
val sharedPreferences = requireActivity().getSharedPreferences(loginmasuk.LOGIN_DATA, Context.MODE_PRIVATE)
fonte