387 Stimmen

Wie erhalte ich die SharedPreferences von einer PreferenceActivity in Android?

Ich verwende eine PreferenceActivity, um einige Einstellungen für meine Anwendung anzuzeigen. Ich blase die Einstellungen über eine xml-Datei auf, so dass meine onCreate (und komplette Klasse Methoden) wie folgt aussieht:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

Die Javadoc von PreferenceActivity PräferenzFragment stellt fest, dass

Diese Einstellungen werden automatisch in SharedPreferences gespeichert, wenn der Benutzer mit ihnen interagiert. Um eine Instanz von SharedPreferences abzurufen, die von der Einstellungshierarchie in dieser Aktivität verwendet wird, rufen Sie getDefaultSharedPreferences(Android.content.Context) mit einem Kontext aus demselben Paket wie diese Aktivität auf.

Aber wie bekomme ich den Namen der SharedPreference in einer anderen Activity? Ich kann nur aufrufen

getSharedPreferences(name, mode)

in der anderen Aktivität, aber ich brauche den Namen der SharedPreference, die von der PreferenceActivity verwendet wurde. Wie lautet der Name oder wie kann ich ihn abrufen?

748voto

Pentium10 Punkte 198024
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

Update

Nach Angaben von Gemeinsame Einstellungen | Android Developer Tutorial (Teil 13) von Sai Geetha M N,

M Einstellungen einer bestimmten Anwendung oder einer Aktivität zu erfassen. Zur Unterstützung bietet Android einen einfachen Satz von APIs.

Präferenzen sind in der Regel Name-Wert-Paare. Sie können gespeichert werden als "Gemeinsame Einstellungen" für verschiedene Aktivitäten in einer Anwendung gespeichert werden (Anmerkung derzeit können sie nicht prozessübergreifend geteilt werden). Oder sie können sein etwas sein, das spezifisch für eine Aktivität gespeichert werden muss.

  1. Gemeinsame Präferenzen: Die gemeinsamen Einstellungen können von allen Komponenten (Aktivitäten, Dienste usw.) der Anwendungen verwendet werden.

  2. Präferenzen für die Aktivität: Diese Einstellungen können nur innerhalb der jeweiligen Aktivität verwendet werden und können nicht von anderen Komponenten der Anwendung genutzt werden.

Gemeinsame Präferenzen:

Die gemeinsamen Einstellungen werden mit Hilfe von getSharedPreferences Methode der Context Klasse. Die Einstellungen werden in einer Standarddatei gespeichert (1) oder Sie können einen Dateinamen angeben (2) zu verwenden, um auf die Einstellungen zu verweisen.

(1) Der empfohlene Weg ist im Standardmodus zu verwenden, ohne den Dateinamen anzugeben

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) So erhalten Sie die Instanz, wenn Sie den Dateinamen angeben

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE ist der Betriebsmodus für die Einstellungen. Dies ist der Standardmodus und bedeutet, dass nur die aufrufende Anwendung auf die erstellte Datei zugreifen kann. Die beiden anderen unterstützten Modi sind MODE_WORLD_READABLE et MODE_WORLD_WRITEABLE . Unter MODE_WORLD_READABLE Die andere Anwendung kann die erstellte Datei lesen, aber nicht verändern. Im Fall von MODE_WORLD_WRITEABLE andere Anwendungen haben ebenfalls Schreibrechte für die erstellte Datei.

Sobald Sie die Einstellungsinstanz haben, können Sie wie folgt vorgehen die gespeicherten Werte abrufen aus den Einstellungen:

int storedPreference = preferences.getInt("storedInt", 0);

An Werte speichern in der Einstellungsdatei SharedPreference.Editor Objekt verwendet werden muss. Editor ist eine verschachtelte Schnittstelle in der SharedPreference Klasse.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Editor unterstützt auch Methoden wie remove() et clear() um die Einstellungswerte aus der Datei zu löschen.

Präferenzen für Aktivitäten:

Die gemeinsamen Einstellungen können von anderen Anwendungskomponenten verwendet werden. Wenn Sie die Einstellungen jedoch nicht mit anderen Komponenten teilen müssen und private Aktivitätseinstellungen haben möchten, können Sie dies mit Hilfe von getPreferences() Methode der Tätigkeit. Die getPreference Methode verwendet die getSharedPreferences() Methode mit dem Namen der Aktivitätsklasse für den Namen der Einstellungsdatei.

Nachfolgend der Code zum Abrufen der Einstellungen

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Der Code für die Speicherung der Werte ist derselbe wie im Falle der gemeinsamen Einstellungen.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Sie können auch andere Methoden wie die Speicherung des Aktivitätsstatus in einer Datenbank verwenden. Hinweis Android enthält auch ein Paket namens android.preference . Das Paket definiert Klassen zur Implementierung von Anwendungseinstellungen UI.

Weitere Beispiele finden Sie auf der Android-Seite Datenspeicherung auf der Website der Entwickler veröffentlichen.

28voto

Wenn Sie keinen Zugang haben zu getDefaultSharedPreferenes() können Sie verwenden getSharedPreferences(name, mode) stattdessen müssen Sie nur den richtigen Namen eingeben.

Android erstellt diesen Namen (möglicherweise auf der Grundlage des Paketnamens Ihres Projekts?). Sie können ihn erhalten, indem Sie den folgenden Code in eine SettingsActivity onCreate() und zu sehen, was preferencesName ist.

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

Die Zeichenkette sollte etwa so aussehen com.example.projectname_preferences . Codieren Sie das irgendwo in Ihrem Projekt fest und übergeben Sie es an getSharedPreferences() und Sie sollten wieder einsatzbereit sein.

22voto

kc ochibili Punkte 3017

Erklären Sie diese Methoden zuerst..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

Rufen Sie diese Funktion dann auf, wenn Sie ein Präfix setzen wollen:

putPref("myKey", "mystring", getApplicationContext());

rufen Sie dies an, wenn Sie einen Vorzug erhalten möchten:

getPref("myKey", getApplicationContext());

Oder können Sie dieses Objekt verwenden https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo was alles noch weiter vereinfacht

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

4voto

hamish Punkte 1074

Die Tatsache, dass ich überall Kontext weitergeben muss, nervt mich wirklich. Der Code wird zu langatmig und unhandlich. Ich mache das in jedem Projekt stattdessen...

public class global {
    public static Activity globalContext = null;

und setzen Sie sie in der Hauptaktivität create

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

Außerdem sollten alle Präferenztasten sprachunabhängig sein, ich bin schockiert, dass das noch niemand erwähnt hat.

getText(R.string.yourPrefKeyName).toString()

Rufen Sie es nun ganz einfach in einer Codezeile auf wie folgt

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

4voto

Urvika G Punkte 191

Wenn Sie ein Kontrollkästchen haben und dessen Wert, d.h. true / false, in einer beliebigen Java-Datei abrufen möchten.

Verwendung:

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X