web-dev-qa-db-fra.com

Quelle est la différence entre getDefaultSharedPreferences () et getPreferences ()?

Je suis actuellement le cours Udacity "Développement d'applications Android". Dans le segment "Leçon 3: Nouvelles activités et intentions> Utiliser les références partagées", l'instructeur m'a demandé de creuser autour du site de développement Android pour savoir comment obtenir les préférences utilisateur de SharedPreferences. Cependant, je l'ai trouvé différent entre la documentation officielle et la solution du cours.

La solution } _ du cours Udacity dit, pour saisir une instance SharedPreferences pour la PreferenceActivity, vous devez appeler:

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

(où getActivity() est simplement la Context ici car elle est appelée dans une Fragment.)

Bien que la documentation officielle sur le site du développeur Android indique que vous devez appeler:

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

Alors, quelle est la différence entre PreferenceManager.getDefaultSharedPreferences(Context context) et Activity.getPreferences(int mode)?

Remarque: Cette question ne concerne en rien getSharedPreferences() qui nécessite un nom de fichier. Il s'agit de la différence entre getPreferences() et getDefaultSharedPreferences().

Merci d'avance.

9
fqf555

En suivant le lien que vous avez fourni à la documentation Android

getSharedPreferences () - Utilisez cette option si vous avez besoin de plusieurs fichiers de préférences identifiés par leur nom, que vous spécifiez avec le premier paramètre.

getPreferences () - Utilisez ceci si vous n'avez besoin que d'un seul fichier de préférences pour votre activité. Comme ce sera le seul fichier de préférences pour votre activité, vous ne fournissez pas de nom.

Ainsi, utilisez getSharedPreferences lorsque les données que vous souhaitez enregistrer/récupérer peuvent être utilisées à partir de différentes activités dans l'application. Si ces préférences ne seront utilisées que dans une seule activité, vous pouvez utiliser getPreferences.

Edit: notez également que, comme indiqué dans le message que vous avez lié, "getDefaultSharedPreferences utilisera un nom par défaut tel que" com.example.something_preferences ", mais getSharedPreferences nécessitera un nom"

16
Shyri

L'une des principales différences: getPreferences () renvoie un fichier uniquement lié à l'activité à partir de laquelle il est ouvert. Alors que getDefaultSharedPreferences () renvoie les préférences globales de l'application. J'ai appris ça à la dure hier.

12
me_

Si vous regardez dans PreferenceManager:

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;
}

Donc, getDefaultSharedPreferences () utilise la méthode getSharedPreferences () avec votre nom de package d'application et votre mode privé. Si vous utilisez getPreferences () à partir de activity, il utilisera la même méthode getSharedPreferences () mais avec getLocalClassName ();

4
Onregs

Depuis le premier article lié ci-dessous: " Remarque: les API SharedPreferences servent uniquement à lire et à écrire des paires clé-valeur. Ne les confondez pas avec les API de préférence, qui vous aident à créer une interface utilisateur ils utilisent SharedPreferences pour implémenter les paramètres de l’application). "

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

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

1
William Greendale