Dans ce tutoriel, nous utiliserons les préférences partagées dans notre application Android pour stocker des données sous forme de paire clé-valeur.
Aperçu des préférences partagées Android
Les préférences partagées permettent aux activités et aux applications de conserver des préférences sous forme de paires clé-valeur similaires à une Map qui persisteront même lorsque l’utilisateur ferme l’application. Android stocke les paramètres des préférences partagées sous forme de fichier XML dans le dossier shared_prefs sous le répertoire DATA/data/{package de l’application}. Le dossier DATA peut être obtenu en appelant Environment.getDataDirectory()
. SharedPreferences est spécifique à l’application, c’est-à-dire que les données sont perdues lors de l’une des options suivantes :
- lors de la désinstallation de l’application
- lors de la suppression des données de l’application (via les paramètres)
Comme son nom l’indique, le but principal est de stocker des détails de configuration spécifiés par l’utilisateur, tels que les paramètres spécifiques à l’utilisateur, en gardant l’utilisateur connecté à l’application. Pour accéder aux préférences, nous avons trois API parmi lesquelles choisir :
- getPreferences() : utilisé à partir de votre activité pour accéder aux préférences spécifiques à l’activité
- getSharedPreferences() : utilisé à partir de votre activité (ou d’un autre contexte de l’application) pour accéder aux préférences au niveau de l’application
- getDefaultSharedPreferences() : utilisé sur PreferenceManager, pour obtenir les préférences partagées qui fonctionnent en concert avec le framework de préférences global d’Android
Dans ce tutoriel, nous utiliserons getSharedPreferences()
. La méthode est définie comme suit : getSharedPreferences (String PREFS_NAME, int mode)
PREFS_NAME est le nom du fichier. mode est le mode de fonctionnement. Voici les modes de fonctionnement applicables:
- MODE_PRIVATE : le mode par défaut, où le fichier créé ne peut être accédé que par l’application appelante
- MODE_WORLD_READABLE : Créer des fichiers lisibles dans le monde entier est très dangereux et susceptible de causer des failles de sécurité dans les applications
- MODE_WORLD_WRITEABLE : Créer des fichiers inscriptibles dans le monde entier est très dangereux et susceptible de causer des failles de sécurité dans les applications
- MODE_MULTI_PROCESS : Cette méthode vérifiera la modification des préférences même si l’instance de préférences partagées a déjà été chargée
- MODE_APPEND : Cela ajoutera les nouvelles préférences aux préférences déjà existantes
- MODE_ENABLE_WRITE_AHEAD_LOGGING : Drapeau d’ouverture de la base de données. Lorsqu’il est défini, il activerait la journalisation anticipée par écrit par défaut
Initialisation
Nous avons besoin d’un éditeur pour modifier et enregistrer les modifications dans les préférences partagées. Le code suivant peut être utilisé pour obtenir les préférences partagées.
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
Stockage des données
editor.commit() est utilisé pour enregistrer les modifications dans les préférences partagées.
editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long
editor.commit(); // commit changes
Récupération des données
Les données peuvent être récupérées à partir des préférences enregistrées en appelant getString() comme suit:
pref.getString("key_name", null); // getting String
pref.getInt("key_name", -1); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
Effacement ou suppression de données
remove(« nom_de_clé ») est utilisé pour supprimer cette valeur particulière. clear() est utilisé pour supprimer toutes les données.
editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes
editor.clear();
editor.commit(); // commit changes
Structure du projet
Code du projet Android Shared Preferences
La mise en page activity_main.xml
se compose de deux vues EditText qui stockent et affichent le nom et l’e-mail. Les trois boutons implémentent leurs onClick respectifs dans la MainActivity
.
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="Save"
android:text="Save" />
<Button
android:id="@+id/btnRetr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="Get"
android:text="Retrieve" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/etEmail"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick="clear"
android:text="Clear" />
<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Email"
android:inputType="textEmailAddress"
android:layout_below="@+id/etName"
android:layout_marginTop="20dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Name"
android:inputType="text"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/etEmail"
android:layout_alignStart="@+id/etEmail" />
</RelativeLayout>
Le fichier MainActivity.java
est utilisé pour sauvegarder et récupérer les données via des clés.
package com.journaldev.sharedpreferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
SharedPreferences sharedpreferences;
TextView name;
TextView email;
public static final String mypreference = "mypref";
public static final String Name = "nameKey";
public static final String Email = "emailKey";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(Name)) {
name.setText(sharedpreferences.getString(Name, ""));
}
if (sharedpreferences.contains(Email)) {
email.setText(sharedpreferences.getString(Email, ""));
}
}
public void Save(View view) {
String n = name.getText().toString();
String e = email.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Name, n);
editor.putString(Email, e);
editor.commit();
}
public void clear(View view) {
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
name.setText("");
email.setText("");
}
public void Get(View view) {
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(Name)) {
name.setText(sharedpreferences.getString(Name, ""));
}
if (sharedpreferences.contains(Email)) {
email.setText(sharedpreferences.getString(Email, ""));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Gonfle le menu; cela ajoute des éléments à la barre d'actions s'ils sont présents.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
mypreference est le nom du fichier où la paire clé-valeur des préférences partagées est stockée. L’image ci-dessous montre le résultat final de notre projet : Cela met fin à ce tutoriel. Vous pouvez télécharger le projet Android Shared Preferences à partir du lien ci-dessous.
Source:
https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial