2012-07-31 2 views
62

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

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

나는 오류가

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

나는이 링크를 따라하려하지만 행운 Accessing SharedPreferences through static methodsStatic SharedPreferences로했다 얻을. 어떤 해결책을 주셔서 감사합니다.

답변

176

getSharedPreferences 메서드는 Context 개체의 메서드이므로 Fragment에서 getSharedPreferences를 호출하면 작동하지 않습니다 ... 컨텍스트가 아니기 때문에! (Activity는 Context를 확장 한 것이므로 getSharedPreferences를 호출 할 수 있습니다.)

그래서 당신은 내 위에 사용자가 제공이 대답이 올바른지주의 참고로

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

getSharedPreferences ("현", 0); 제로 (0)는 개인/공공을 의미합니까? – Kailas

+0

@Kailas correct, 모드, 즉 WORLD_READABLE 요법. http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String, int) – Jug6ernaut

+0

해당 응용 프로그램이 공유 환경 설정에만 액세스 한 모드의 유형 없음 다른 응용 프로그램 없음 해당 공유 환경 설정 값을 읽고 쓰십시오? – Kailas

4

하여 응용 프로그램 컨텍스트를 얻을 수 있습니다.

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

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

+1

에게 감사 드리며 onActivityCreated가 호출 될 때까지 활동이 완전히 초기화되지 않았습니다 ... – hotzen

9

표시된 대답은 나를 위해 작동하지 않았다, 나는 사용했다

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

편집 :

또는 단지가 this 제거하려고 :

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

기본 공유 환경 설정에 액세스하고 있으므로 표시된 대답이 작동하지 않습니다. 더 나은 디자인은 환경 설정을 공유 객체가 아닌 별도의 개인 공간에 저장하는 것입니다.이 공간에서 질문과 대답이 여기에 있습니다. – zeeshan

0

당신은 SharedPrefences을 만들 수 있습니다 onAttach 같은 조각의 방법 :

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