Le point de départ de la manipulation des préférences partagées est la classe SharedPreferences. Elle possède des méthodes permettant d'enregistrer et récupérer des paires de type identifiant-valeur pour les types de données primitifs, comme les entiers ou les chaînes de caractères. L'avantage réel étant bien sûr que ces données sont conservées même si l'application est arrêtée ou tuée.
Exemple : Vous jouez à un jeu sur Android, avant de jouer au jeu, vous choisissez les paramètres du jeu tels que la luminosité, les niveaux de volume et le niveau de difficulté. Après l'avoir terminé, vous pouvez désactiver le jeu et continuer à jouer le lendemain. SharedPreferences vous permet de sauvegarder tous les paramètres que vous avez définis précédemment et vous permet de redéfinir les paramètres qui peuvent être utilisés sans devoir être réinitialisés.
Il existe trois façons d'avoir accès aux SharedPreferences :
-
La plus simple est d'utiliser la méthode statique
SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context)
ce qui revient à appelerSharedPreferences getPreferences(MODE_PRIVATE)
-
Si vous désirez utiliser un fichier standard par activité, alors vous pourrez utiliser la méthode
SharedPreferences getPreferences(int mode)
ce qui revient à appelerSharedPreferences getSharedPreferences (NOM_PAR_DEFAUT, mode)
-
En revanche, si vous avez besoin de plusieurs fichiers que vous identifierez par leur nom, alors utilisez
SharedPreferences getSharedPreferences (String name, int mode)
où name sera le nom du fichier.
En ce qui concerne le second paramètre, mode, il peut prendre trois valeurs :
Context.MODE_PRIVATE
, pour que le fichier créé ne soit accessible que par l'application qui l'a créé.Context.MODE_WORLD_READABLE
, pour que le fichier créé puisse être lu par n'importe quelle application.Context.MODE_WORLD_WRITEABLE
, pour que le fichier créé puisse être lu et modifié par n'importe quelle application.
- un EditText pour rentrer le nom
- Un bouton pour valider
Mon fichier main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Votre nom : "
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/login_nom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Marie"
android:inputType="text"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Valider"
android:id="@+id/btn_valider" />
</LinearLayout>
public class MainActivity extends AppCompatActivity {
public static final String monNom = "Marie";
private EditText editNom;
private Button btnValider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editNom = findViewById(R.id.login_nom);
btnValider = findViewById(R.id.btn_valider);
// La méthode pour avoir accès à l'enregistrement des données
SharedPreferences rememberNom = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
btnValider.setOnClickListener(v -> {
// Récupérer les valeurs de l'input
String prenom = editNom.getText().toString();
// Modifier des valeurs dans un SharedPreferences
SharedPreferences.Editor editor = rememberNom.edit();
// Insérer ma String (StringParDefaut, nomInput)
editor.putString(monNom, prenom);
// sauvegarder
editor.commit();
Toast.makeText(MainActivity.this,"Merci",Toast.LENGTH_LONG).show();
});
}
}
Pour vérifier que ça a marcher :
- A droite cliquer sur Device File Explorer
- data > data > nom de votre app > shared_prefs
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="Marie">pppp</string>
</map>
Il y a bien ce que j'avais entré.