[android] 조각의 Android SharedPreferences

Fragment 내에서 SharedPreferences를 읽으려고합니다. 내 코드는 다른 활동에서 환경 설정을 얻는 데 사용하는 것입니다.

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

오류가 발생합니다

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

이 링크를 따르려고 시도했지만 정적 메서드
정적 SharedPreferences를 통해 SharedPreferences 액세스 운이 없습니다 . 모든 솔루션에 감사드립니다.



답변

이 메서드 getSharedPreferencesContext객체 의 메서드 이므로 a 에서 getSharedPreferences를 호출하는 것만으로 Fragment는 작동하지 않습니다. Context가 아니기 때문입니다! (Activity는 Context의 확장이므로 getSharedPreferences를 호출 할 수 있습니다.)

따라서 응용 프로그램 컨텍스트를 가져와야합니다.

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


답변

표시된 답변이 저에게 효과가 없었습니다.

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

편집하다:

또는 다음을 제거하십시오 this.

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


답변

주의 사항으로 위의 사용자가 제공 한이 답변은 정확합니다.

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

그러나 onAttach가 호출되기 전에 조각에서 무언가를 얻으려고 시도하면 getActivity ()가 null을 반환합니다.


답변

다음 과 같이 조각 의 SharedPrefencesin onAttach메서드를 만들 수 있습니다 .

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


답변

이것은 나를 위해 트릭을했다

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

여기에서 확인하십시오 https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs


답변

getActivity()onAttach()같은 상황에서 didnot 도움 나
어쩌면 내가 뭔가 잘못을했다
하지만! 나는 다른 결정을 발견
나는 필드를 만든 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)...