Kann nicht Zugriff Präferenzen erstellt von PreferenceActivity
-
29-09-2019 - |
Frage
Ich habe ein Minimalprogramm, das wenig mehr tut als sie gesetzt ich zwei Präferenzen (ein int und ein String) Androids PreferenceActivity
verwenden. Also habe ich eine XML-Datei, die meine Vorlieben definiert, und eine Aktivität, die PreferenceActivity
erstreckt. Meine Haupttätigkeit hat ein Optionsmenü, das meine Vorlieben Aktivität startet. All das funktioniert super. Ich kann meine Vorlieben und die Werte bleiben, während und nach meinem Programm ausführt gesetzt.
Nun, meiner Haupttätigkeit möchte ich diese Einstellungen abzurufen. Sollte einfach, nicht wahr? Hier ist der Code aus jeder Probe ich je gesehen habe:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");
Das Problem ist, wenn ich an dem getInt()
Anruf brechen und Schritt über, meinen Stack wie folgt aussieht und die App stürzt ab, wenn ich weiterhin:
Thread [<3> main] (Suspended)
ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord, Intent) Zeile: 2494
ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord, Intent) Zeile: 2512
ActivityThread.access $ 2200 (ActivityThread, ActivityThread $ ActivityRecord, Intent) Zeile: 119
ActivityThread $ H.handleMessage (Message) Linie: 1863
ActivityThread $ H (Handler) .dispatchMessage (Message) Zeile: 99 Looper.loop () Zeile: 123
ActivityThread.main (String []) line: 4363 Method.invokeNative (Object, Object [], Klasse, Klasse [], Klasse, int, boolean) Linie: nicht verfügbar [nativen Methode] Method.invoke (Object, Objekt ...) Zeile: 521
ZygoteInit $ MethodAndArgsCaller.run () Linie: 860 ZygoteInit.main (String []) Linie: 618 NativeStart.main (String []) Linie: nicht verfügbar [native Methode]
Ich habe versucht, Variationen über den Parameter getDefaultSharedPreferences () übergeben, einschließlich:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
... und wahrscheinlich auch einige andere in anderem Kontext (dh wenn Präferenzen von meiner Haupttätigkeit gegen eine andere Aktivität gegen eine gewisse Funktion in einer Klasse zuzugreifen, die nicht eine Aktivität ist. Das Ergebnis ist immer das gleiche.
Ich habe ein Dutzend Q & A-Beiträge im Internet von anderen mit diesem Problem gelesen hat und sie gelöst hat, indem Code identisch Mine zu schreiben, so dass ich nicht erwarten, gibt es eine Lösung, aber wenn jemand eine Idee hat, lassen Sie es mich wissen.
Lösung
Sie zeigen nicht den Stack-Trace. Die Thread [<3> main] (Suspended)
ist nutzlos Ausgabe von Eclipse-. Sie müssen den realen Stack-Trace untersuchen, die Sie, indem Android bekommen sollten auf den „Force Close“ Dialog fortzusetzen, dann bei LogCat suchen (in Ihrer DDMS Perspektive) für den Stack-Trace.
Meine Vermutung ist, dass Sie eine Vorliebe namens intSetting
haben, aber es ist nicht eine ganze Zahl, aber das ist nur eine Vermutung. Aus der Manschette kann, glaube ich nicht von einem der eingebauten in Preference
Klassen, die eine ganze Zahl Vorlieben speichern, wie sie meist Strings speichern.
Ihr Weg den Standard SharedPreferences
des Zugriffs (mit this
) korrekt ist, und sollte nicht geändert werden müssen.
Hier ist ein Beispielprojekt zeigt die Verwendung von PreferenceActivity
und bekommen die SharedPreferences
zurück.
Andere Tipps
Nur um sicherzugehen:
-
In Ihrem
AndroidManifest
sollten Sie dieActivity
haben, diePreferenceActivity
mit etwas wie folgt erweitert: -
Die
Activity
diePreferenceActivity
erstreckt sollte den folgenden Code haben:@Override protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); addPreferencesFromResource (R.layout.prefs); }
Dabei gilt R.layout.prefs
Ihre Einstellungen ist xml.
Wenn Sie die beiden Dinge getan, bitte bearbeiten Sie Ihre Frage mit dem xml Sie verwenden so ppl Ihr Problem reproduzieren kann.
Es wäre nicht zum Absturz bringen, auch wenn Ihre Präferenz nicht gespeichert wurde, ich glaube, Sie einen Code verpaßt und der Absturz kommt nicht von diesem Punkt. Haben Sie noch andere Themen?