599 votes

Comment utiliser SharedPreferences dans Android pour stocker, récupérer et modifier des valeurs ?

Je veux stocker une valeur temporelle et j'ai besoin de la récupérer et de la modifier. Comment puis-je utiliser SharedPreferences pour faire ça ?

0 votes

J'ai implémenté un wrapper Generic SharedPreferences, jetez-y un œil : Android-know-how-to.blogspot.co.il/2014/03/

0 votes

A approche simplifiée serait d'utiliser cette bibliothèque : github.com/viralypatel/Android-SharedPreferences-Helper ... de plus amples détails techniques dans mon répondre ici ...

0 votes

857voto

naikus Points 11284

Pour obtenir des préférences partagées, utilisez la méthode suivante Dans votre activité :

SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE);

Pour lire les préférences :

String dateTimeKey = "com.example.app.datetime";

// use a default value using new Date()
long l = prefs.getLong(dateTimeKey, new Date().getTime()); 

Pour modifier et enregistrer les préférences

Date dt = getSomeDate();
prefs.edit().putLong(dateTimeKey, dt.getTime()).apply();

Le répertoire d'exemples de l'Android sdk contient un exemple de récupération et de stockage des préférences partagées. Il est situé dans le répertoire :

<android-sdk-home>/samples/android-<platformversion>/ApiDemos directory

Editer==>

J'ai remarqué qu'il est important d'écrire la différence entre commit() et apply() ici aussi.

commit() retourner true si la valeur a été sauvegardée avec succès sinon false . Il sauvegarde les valeurs dans SharedPreferences de manière synchrone .

apply() a été ajouté en 2.3 et ne renvoie aucune valeur que ce soit en cas de succès ou d'échec. Il enregistre immédiatement les valeurs dans SharedPreferences, mais lance un fichier asynchrone commettre. Plus de détails sont [ici](http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()) .

0 votes

Ainsi, la prochaine fois que l'utilisateur exécutera mon application, la valeur stockée sera déjà présente et je pourrai la récupérer... n'est-ce pas ?

0 votes

Que voulez-vous dire : prefs.getLong(dateTimeKey, new Date().getTime()) ; Qu'est-ce que new Date().getTime() ? Quelle est sa signification ? Avez-vous choisi cela arbitrairement ??

5 votes

(Pour tous ceux qui lisent ce qui précède) Oui, c'est arbitraire. Cet exemple enregistre simplement la date du jour en tant que préférence avec la clé "com.example.app.datetime".

300voto

Preet Points 1316

Pour stocker les valeurs dans les préférences partagées :

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Name","Harneet");
editor.apply();

Pour récupérer les valeurs des préférences partagées :

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("Name", "");
if(!name.equalsIgnoreCase(""))
{
    name = name + "  Sethi";  /* Edit the value here*/
}

21 votes

Je préfère cette réponse car elle utilise getDefaultSharedPreferences. Pour la plupart des utilisateurs, cela simplifie les choses car les mêmes préférences sont accessibles dans toute l'application et vous n'avez pas à vous soucier du nom de votre fichier de préférences. Plus d'informations à ce sujet ici : stackoverflow.com/a/6310080/1839500

1 votes

Je suis d'accord... J'ai trouvé ceci après m'être arraché les cheveux en essayant de comprendre pourquoi je ne pouvais pas accéder à mes préférences partagées depuis une autre activité en utilisant la méthode de la réponse acceptée. Merci beaucoup !

0 votes

Comment puis-je l'utiliser pour sauvegarder et charger Map<DateTime, Integer> ?

169voto

DeRagan Points 10551

A modifier données de sharedpreference

 SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
 editor.putString("text", mSaved.getText().toString());
 editor.putInt("selection-start", mSaved.getSelectionStart());
 editor.putInt("selection-end", mSaved.getSelectionEnd());
 editor.apply();

A récupérer données de sharedpreference

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if (restoredText != null) 
{
  //mSaved.setText(restoredText, TextView.BufferType.EDITABLE);
  int selectionStart = prefs.getInt("selection-start", -1);
  int selectionEnd = prefs.getInt("selection-end", -1);
  /*if (selectionStart != -1 && selectionEnd != -1)
  {
     mSaved.setSelection(selectionStart, selectionEnd);
  }*/
}

Modifier

J'ai pris cet extrait de l'échantillon API Demo. Il y avait un EditText boîte là . Dans ce context Ce n'est pas nécessaire. Je commente la même chose.

12 votes

+1, mais utilisez getPreferences(MODE_PRIVATE) ; au lieu de getPreferences(0) ; pour plus de lisibilité.

0 votes

Qu'est-ce que mSaved ici ? J'ai besoin de sauvegarder deux valeurs de chaîne.

0 votes

J'aimerais également savoir ce qu'est mSaved. Nvm je pense que c'est la boîte d'édition

44voto

stackoverflow Points 723

Pour écrire :

SharedPreferences preferences = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Authentication_Id",userid.getText().toString());
editor.putString("Authentication_Password",password.getText().toString());
editor.putString("Authentication_Status","true");
editor.apply();

A lire :

SharedPreferences prfs = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
String Astatus = prfs.getString("Authentication_Status", "");

0 votes

MODE_WORLD_WRITEABLE est déprécié.

29voto

ArcDare Points 1021

Le moyen le plus simple :

Pour économiser :

getPreferences(MODE_PRIVATE).edit().putString("Name of variable",value).commit();

Pour récupérer :

your_variable = getPreferences(MODE_PRIVATE).getString("Name of variable",default value);

0 votes

J'ai essayé entre deux activités et ça n'a pas marché. La structure du paquet doit-elle être incluse dans le nom de la variable ?

0 votes

Pour utiliser cette structure entre les activités, remplacez getPreferences(MODE_PRIVATE) par PreferenceManager.getDefaultSharedPreferences(votre activité).

0 votes

Utiliser apply() au lieu de commit()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X