2012-07-31 6 views
62

Ich versuche SharedPreferences in Fragment zu lesen. Mein Code ist, was ich verwende, um Präferenzen in anderen Aktivitäten zu erhalten.Android SharedPreferences in Fragment

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

ich Fehler

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

Ich habe versucht, diese Links zu folgen, aber ohne Glück Accessing SharedPreferences through static methods und Static SharedPreferences. Danke für jede Lösung.

Antwort

176

Die Methode getSharedPreferences ist eine Methode des Context Objekts, also ruft getSharedPreferences nur von Fragment wird nicht funktionieren ..., weil es kein Kontext ist! (Aktivität ist eine Erweiterung von Context, daher können wir getSharedPreferences aufrufen).

So müssen Sie Ihre Anwendungen Kontext von

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

getSharedPreferences ("pref", 0); null (0) bedeutet was privat/öffentlich? – Kailas

+0

@Kailas richtig, der Modus, dh WORLD_READABLE ect. http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String, int) – Jug6ernaut

+0

Welche Art von Modus ich verwendet die gemeinsamen Einstellungen nur Zugriff von dieser Anwendung keine andere Anwendung Lesen/Schreiben Sie diese gemeinsamen Voreinstellungen Werte? – Kailas

4

Als Hinweis zur Vorsicht bekommen diese Antwort durch den Benutzer über mir richtig ist zur Verfügung gestellt.

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

Wenn Sie jedoch etwas in dem Fragment vor onAttach zu erhalten versuchen, wird getActivity() aufgerufen wird null zurück.

+1

und die Aktivität wird nicht vollständig initialisiert, bis onActivityCreated heißt ... – hotzen

9

Die deutliche Antwort für mich nicht funktionierte, hatte ich

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

EDIT zu verwenden:

Oder einfach nur versuchen, die this entfernen:

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

Die markierte Antwort funktionierte nicht für Sie, da Sie auf die gemeinsamen Standardeinstellungen zugreifen. Ein besseres Design besteht darin, Ihre Präferenzen nicht als gemeinsames Objekt zu speichern, sondern in einem separaten und privaten Bereich, worum es bei der Frage und Antwort hier geht. – zeeshan

0

Sie die SharedPrefences machen in onAttach Methode von Fragment wie folgt:

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