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.

War es hilfreich?

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 die Activity haben, die PreferenceActivity mit etwas wie folgt erweitert:

  • Die Activity die PreferenceActivity 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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top