16/12/2024
Persistance des
données Notion de Persistance
DONNÉES VOLATILES / DONNÉES PERSISTANTES
A l a fer m etu re d ’un e ap p l ic ati on , l es var i ab l es d éc l aré es d an s
DÉVELOPPEMENT POUR MOBILES c ette ap p l i c ati o n p erd en t l eu rs val eu rs et retrou ven t l eu rs
val eu rs i n i ti al es .
(ANDROID) O n a b esoi n p ar foi s d e sau vegard er c es val eu rs à l a p roc h ai n e
rel an c e d e l ’ap p l i c ati on .
Chapitre 6 : La p l u p ar t d u tem p s, u n e ap p l ic ati on a b eso i n d e stoc ker d es
Persistance des données d on n ées à u n m om en t o u u n au tre :
Couleur préférée de l’utilisateur
Sa configuration réseau
Des fichiers téléchargés sur Internet
Des informations concernant des objets manipulés par l’application
Dr. KHALIFI Hamid (nom, téléphone, email d’un contact).
[Link]@[Link]
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données Notion de Persistance données Notion de Persistance
TYPES DE STOCKAGE TYPES DE STOCKAGE
L’op ti on d e stoc kage d es don n ées c hoi si e va d ép en d re d es
Android fournit plusieurs méthodes pour faire b esoi n s : d on n ées p r i vées o u p u b li q u es, l a tai l l e d es d on n ées à
persister les données : p réser ver, l oc al em en t o u vi a l e réseau …
Des entrées sorties de type fichier. Ces m éth o d es u ti l i sen t soi t d es él ém e n ts p rop res à l ’A PI Java
o u c eu x assoc i és à l ’A PI d ’A n d roi d .
Base de donnée basé sur SQLite.
Données actives d'une activité.
Un mécanism e de sauvegarde clé/valeur, utilisé
pour les fichiers de préférences partageables.
Un Serveur distant (Stockage réseau).
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données Les Préférences Partagées données Les Préférences Partagées
Shared Preferences : C’EST QUOI ? Quelques Utilisations des Shared Preferences :
U ti l i sées p ou r sau vegard er l es p référen c es (sou s for m e d e
d on n ées) d e l ’u ti l i sateu r.
Ces p référen c es son t p ar tagées en tre l es ac ti vi tés d e
l ’ap p l i c ati on o u en tre p l u si eu rs ap p l i c ati on s .
Les P référen c es Par tagé es son t d es f i c h i ers XM L ad ap tés à
stoc ker d es d on n ées p eu n om b reu ses .
Les d on n ées sau vegard ées n e n éc essi ten t p as u n trai tem en t
p ar l ot ( c o m m e p ou r l es B D).
Les d on n ées son t d e si m p l es p ai rs (c l é, val eu r ) d an s c e f i c h i er.
Les p référen c e s n e son t p as c r yp tées . I l fau d ra fai re atten ti on
si l ’ i n ten ti on est d e p réser ver d es d on n ées c r i ti q u es .
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
1
16/12/2024
Persistance des Persistance des
données Les Préférences Partagées données Les Préférences Partagées
La Classe SharedPreferences Sauvegarder les Données
La c l asse Sh ared Preferen c es :
est importée du package : [Link]
Contient les méthodes de manipulation de ces fichiers
O n u ti l i se l a m éth od e :
getPreferences (int mode) : si on a besoin d’un seul fichier de préférence
getSharedPreferences (String name, int mode) : si on a besoin de plusieurs fichiers
de préférences identifiés par leurs noms.
1. Faire référence au fichier de sauvegarde
L’argu m en t m od e p eu t être : SharedPreferences mesPrefs = getSharedPreferences("Mydata", Context.MODE_PRIVATE) ;
-MODE_PRIVATE : le fichier est réservée à l’application (valeur par défaut). 2. Appeler l’éditeur pour écrire dans le SharedPreferences
-MODE_MULTI_PROCESS : le fichier peut être utilisé simultanément par plusieurs [Link] edit = [Link]() ;
processus (à partir de Android 2.3).
3. Utiliser l’éditeur et ajouter les données par la méthode: putXXX (clé, valeur)
-MODE_APPEND: Permet d'ajouter des nouvelles préférences aux préférences existantes
[Link]("nom", "Ali") ; // putInt((“age", 30) ; putBoolean(“married", true) ; …
Les modes « WORLD_READABLE » et « WORLD_WRITEABLE » sont dépréciés depuis 4. Valider les changement dans le SharedPreferences
l’API17. Ils provoqueront l’exception « SecurityException » depuis l’API 24 (Nougat). [Link]() ; // ou [Link]() ;
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données Les Préférences Partagées données Les Fichiers
Récupérer les Données
La manipulation des fichiers téléchargés et/ou des
fichiers sur la carte SD du téléphone est possible
Un accès classique au systèm e de fichier appuyé sur
les classes classiques de Java EE.
1. Faire référence au fichier de sauvegarde
Une gestion simplifiée des permis sions et des fichiers
SharedPreferences prefs = getSharedPreferences("Mydata", Context.MODE_PRIVATE); embarqués dans l'application.
2. Utiliser la clé pour récupérer les données avec la méthode :
valeur = getXXX (clé, default)
String name = [Link]("nom"," Introuvable"); // "Introuvable" est la valeur retournée si
non trouvé
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données Les Fichiers données Les Fichiers
EN INTERNE : EN INTERNE :
Pour la gestion des permissions, on retrouve :
La présenc e des fichiers dépend de la présence de MODE _PRIVATE permet de c réer (ou de remplac er,
l'application. Par conséquent, les fichiers seront d'ailleurs) un fichier qui s era utilisé uniquement par
supprimés si l'utilisateur désinstalle l’application. l'application.
MODE _WORL D_READABLE pour créer un fichier que
En revanche, comme la mémoire interne du même d'autres applications pourront lire.
téléphone risque d'être limitée, on évite en général de MODE _WORL D_WRITABLE pour c réer un fichier où
placer les plus gros fichiers de cette manière. même d'autres applications pourront lire et écrire.
MODE _APPEND pour écrire à la fin d'un fichier
préexistant, au lieu de créer un fichier.
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
2
16/12/2024
Persistance des Persistance des
données Les Fichiers données Les Fichiers
EN INTERNE : EN EXTERNE :
Les périphérique externe, désigne principalem ent
une carte SD, une clé USB, un ordinateurs,…
Les ressources permettent aussi de récupérer un Le problèm e c’est qu’il n'existe aucune garantie que
fichier embarqué dans l'application: vos fichiers soient présents , l'utilisateur pourra les
avoir supp rimés ou avoir enlevé le périphérique de son
emplacement.
Cependant, c’est une solution qui offre une taille de
stockage importante.
Mon App Lire/Ecrire fichiers
Stockage
Interne
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données Les Fichiers données Les Fichiers
EN EXTERNE : EN EXTERNE :
Pour écrire sur un périphérique externe, il vous faudra ajouter la Pour vérifier l’accès à la mémoire externe, vous utilisez la
permission au Manifest : WRITE_EXTERNAL_STORAGE méthode : [Link]()
La chaîne de caractères retournée doit correspondre à
Environment.MEDIA_MOUNTED qui indique que le périphérique
est bien monté et peut être lu
Stockage Externe
Lire/Ecrire
Fichiers Lire/Ecrire
Mon publics Other
Lire/Ecrire
A A
Fichiers
p privés p
p p
s
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données Les Fichiers données Les Fichiers
EN EXTERNE : RECAPITULATION :
Afin d'obtenir la racine des fichiers du périphérique externe,
vous utilisez la méthode statique :
[Link]().
Cependant, il est conseillé d'écrire des fichiers uniquement à un
emplacement précis : /Android/data/<votre_package>/files/
En effet, les fichiers qui se trouvent à cet emplacement seront
automatiquement supprimés dès que l'utilisateur effacera votre
application
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
3
16/12/2024
Persistance des Persistance des
données SQLite données SQLite
PRESENTATION Structure de la BDD :
SQLite est une base de données relationnelles disponible sur À l’aide d’une classe d’assistance qui hérite de
tous les terminaux Android et le SDK fournit des API permettant SQLiteOpenHelper, on peut maîtriser toutes les relations avec la
au développeur de créer/gérer sa base de données privées. base de données, notamment déclarer les noms de la base, des
SQLite fournit un moyen efficace de gérer une petite quantité tables, des colonnes ainsi que la version comme constantes.
de donnée. Il est nécessaire de définir le constructeur et redéfinir les
Une application peut disposer de plusieurs bases de données (il méthodes onCreate() et on Upgrade().
n’y a pas de limitation à priori). onCreate() sera appelée à la création de la base de données et de ses des tables.
onUpgrade() sera utilisée lorsque la BD passe d’une version à une autre version
supérieure.
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données SQLite données SQLite
Structure de la BDD : Structure de la BDD :
SQLite ne contient que cinq types de données : Il est aussi possible de déclarer des contraintes pour chaque
NULL pour les données NULL. attribut.
INTEGER pour les entiers (sans virgule). On trouve comme contraintes :
REAL pour les nombres réels (avec virgule). PRIMARY KEY pour désigner la clé primaire sur un attribut .
TEXT pour les chaînes de caractères. NOT NULL pour indiquer que cet attribut ne peut valoir NULL .
BLOB pour les données brutes, par exemple si vous voulez CHECK afin de vérifier que la valeur de cet attribut est cohérente.
mettre une image dans votre base de données. DEFAULT sert à préciser une valeur par défaut.
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données SQLite données SQLite
Exemple de création : Exemple pour une BDD existante:
Pour une base de données déjà existante, la classe d’assistance
doit hériter de SQLiteAssetHelper :
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
4
16/12/2024
Persistance des Persistance des
données SQLite données SQLite
Manipulation de la BDD : Manipulation de la BDD :
Pour réaliser des écritures ou lectures, on utilise les
SQLiteDatabase : Classe permettant de manipuler une base de
méthodes getWritableDatabase() et getReadableDatabase()
données SQLite sous Android.
qui renvoient une instance de SQLiteDatabase.
Elle dispose d’un ensemble de méthodes permettant d’accéder
Sur cet objet, une requête peut être exécutée via la
à la base en lecture et en écriture:
◦ Open() : Ouvrir la base de données en lecture ou en écriture méthode query()
◦ Query() : Pour exécuter des requêtes SQL
◦ Update () : Pour modification
◦ Close() : Fermer une connexion à la base
Plus spécifiquement elle propose des méthodes génériques ou rawQuery():
pour les requêtes CRUD : Create, read, update, delete.
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données SQLite données SQLite
Parcourir le Résultat :
La méthode query() et rawQuery() permettent de retourner un objet Cursor Extraire les Champs Résultats :
qui pointe sur un ensemble d’enregistrements résultat d’une requête.
Ce Cursor permet de traiter la réponse (en lecture ou écriture), via ces Les curseurs, Objet représentant le résultat d'une requête
méthodes : – Liste des enregistrements (et colonnes) sélectionnés
int getCount() : Retourne le nombre de lignes renvoyés par le curseur.
boolean moveToFirst() : déplace le curseur à la première ligne.
boolean moveToNext() : pour aller à la ligne suivante. Par défaut on
applet 225
commence à la ligne -1, donc, en utilisant un moveToNext() sur un tout
nouveau Cursor, on passe à la première ligne. const 255
boolean moveToPrevious() :pour aller à l'entrée précédente. mapreduce 100
boolean moveToPosition(int position) : pour aller à la position voulue.
int getPosition() : pour récupérer la position actuelle.
void close() : Fermer le curseur.
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données SQLite données SQLite
Extraire les Champs Résultats :
L’objet Cursor pointe sur un enregistrement résultat à un moment donné. Exemple :
Le Cursor peut accéder aux champs de l’enregistrement pointé par les
méthodes de la forme : getXXX (N°Champ) avec XXX étant le type de la
donnée de ce champ (Float, String, Int, Double, ...)
Exemple :
getInt(int columnIndex) : retourne la valeur (int) de la colonne passée
en paramètre.
getString(int columnIndex) : retourne la valeur (String) de la colonne
passée en paramètre.
getColumnIndex(String nom) : donne l’index de la colonne désignée
par le nom.
getColumnName(int columnIndex) : donne le nom de la colonne
désignée par l'index.
...
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
5
16/12/2024
Persistance des Persistance des
données SQLite données SQLite
Exercice: Exercice - Correction
Cursor curseur = bd. rawQuery("select * from table", null); [Link]();
La position du curseur n’est pas initialisée
!
tant qu’un déplacement n’a pas été effectué
[Link]();
[Link]();
table
[Link]("word");
[Link](4);
[Link](3);
[Link](2);
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données SQLite données SQLite
Exercice - Correction Exercice - Correction
[Link]();
[Link]();
La position du curseur n’est pas initialisée
!
tant qu’un déplacement n’a pas été effectué
5
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des Persistance des
données SQLite données SQLite
Exercice - Correction Exercice - Correction
[Link]("word"); [Link](4);
1 locale
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
6
16/12/2024
Persistance des Persistance des
données SQLite données SQLite
Exercice - Correction Exercice - Correction
[Link](3); [Link](2);
100 user1
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID
Persistance des
données SQLite
Bonnes pratiques :
N’oubliez jamais de fermer la base de données après chaque
Utilisation.
Toujours fermer également les curseurs.
Vérifiez toujours qu’un curseur a au moins une ligne avant de le
parcourir.
DÉVELOPPEMENT POUR MOBILES (ANDROID) - DR. KHALIFI HAMID