web-dev-qa-db-de.com

Was ist der Unterschied zwischen getDefaultSharedPreferences () und getPreferences ()?

Ich nehme gerade am Udacity-Kurs "Android Apps entwickeln" teil. Im Abschnitt "Lektion 3: Neue Aktivitäten und Absichten> SharedPreferences verwenden" bat mich der Kursleiter, auf der Android Developer-Website nachzuschlagen, wie ich die Benutzereinstellungen von SharedPreferences abrufen kann. Ich fand es jedoch anders zwischen der offiziellen Dokumentation und der Lösung des Kurses.

Die Lösung des Udacity-Kurses besagt, dass Sie Folgendes aufrufen sollten, um eine SharedPreferences -Instanz für die PreferenceActivity zu erhalten:

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

(wobei getActivity() hier einfach die Context ist, weil sie in einer Fragment aufgerufen wird.)

Während die offizielle Dokumentation auf der Android Developer Site angibt, dass Sie anrufen sollten:

SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE)

Also, was ist der Unterschied zwischen PreferenceManager.getDefaultSharedPreferences(Context context) und Activity.getPreferences(int mode)?

Bitte beachten Sie: Diese Frage bezieht sich nicht auf getSharedPreferences(), für die ein Dateiname erforderlich ist. Es geht um den Unterschied zwischen getPreferences() und getDefaultSharedPreferences().

Danke im Voraus.

9
fqf555

Gemäß dem Link, den Sie zur Android-Dokumentation angegeben haben

getSharedPreferences () - Verwenden Sie diese Option, wenn Sie mehrere Voreinstellungsdateien benötigen, die durch den Namen gekennzeichnet sind, den Sie mit dem ersten Parameter angeben.

getPreferences () - Verwenden Sie diese Option, wenn Sie nur eine Einstellungsdatei für Ihre Aktivität benötigen. Da dies die einzige Voreinstellungsdatei für Ihre Aktivität ist, geben Sie keinen Namen an.

Verwenden Sie getSharedPreferences, wenn die Daten, die Sie speichern/abrufen möchten, aus verschiedenen Aktivitäten in der App verwendet werden können. Wenn diese Einstellungen nur in einer Aktivität verwendet werden, können Sie getPreferences verwenden.

Bearbeiten: Beachten Sie auch, dass getDefaultSharedPreferences, wie in dem von Ihnen verlinkten Beitrag erwähnt, einen Standardnamen wie "com.example.something_preferences" verwendet, getSharedPreferences jedoch einen Namen erfordert.

16
Shyri

Einer der Hauptunterschiede: getPreferences () gibt eine Datei zurück, die sich nur auf die Aktivität bezieht, aus der sie geöffnet wird. Während getDefaultSharedPreferences () die globalen Einstellungen der Anwendung zurückgibt. Das habe ich gestern auf die harte Tour gelernt.

12
me_

Wenn Sie einen Blick in den PreferenceManager werfen:

public static SharedPreferences getDefaultSharedPreferences(Context context) {
    return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
            getDefaultSharedPreferencesMode());
}

/**
 * Returns the name used for storing default shared preferences.
 *
 * @see #getDefaultSharedPreferences(Context)
 * @see Context#getSharedPreferencesPath(String)
 */
public static String getDefaultSharedPreferencesName(Context context) {
    return context.getPackageName() + "_preferences";
}

private static int getDefaultSharedPreferencesMode() {
    return Context.MODE_PRIVATE;
}

Daher verwendet getDefaultSharedPreferences () die Methode getSharedPreferences () mit dem Namen Ihres App-Pakets und dem Modus private. Wenn Sie getPreferences () aus der Aktivität verwenden, wird dieselbe Methode getSharedPreferences () verwendet, jedoch mit getLocalClassName ().

4
Onregs

Vom ersten Artikel, der unten verlinkt ist: "Hinweis: Die SharedPreferences-APIs dienen nur zum Lesen und Schreiben von Schlüssel-Wert-Paaren, und Sie sollten sie nicht mit den Preference-APIs verwechseln, mit denen Sie eine Benutzeroberfläche für Ihre App-Einstellungen erstellen können (obwohl Sie verwenden SharedPreferences als Implementierung, um die App-Einstellungen zu speichern. "

http://developer.Android.com/training/basics/data-storage/shared-preferences.html

http://developer.Android.com/guide/topics/ui/settings.html

1