0% ont trouvé ce document utile (0 vote)
13 vues7 pages

Persistance des Données sur Android

Transféré par

hassandahmouchi9
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
13 vues7 pages

Persistance des Données sur Android

Transféré par

hassandahmouchi9
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Common questions

Alimenté par l’IA

Lorsqu'on écrit sur un stockage externe, il est essentiel d'ajouter la permission WRITE_EXTERNAL_STORAGE au manifest. Les fichiers doivent être écrits dans un emplacement spécifique, comme /Android/data/<votre_package>/files/, pour garantir qu'ils soient supprimés si l'application est désinstallée. Cependant, comme les périphériques externes peuvent être retirés par l'utilisateur, il n'y a aucune garantie que les fichiers seront toujours accessibles .

SQLiteOpenHelper aide à créer, ouvrir, et gérer l’évolution de la base de données. En héritant de cette classe, on peut initialiser la base de données dans onCreate(), mettre à niveau la base de données dans onUpgrade(), et centraliser la déclaration des noms des tables, colonnes et versions comme constantes, rendant la gestion plus structurée et moins sujette aux erreurs .

Les meilleures pratiques incluent toujours fermer la base de données et les curseurs après chaque utilisation pour éviter les fuites de mémoire, vérifier qu’un curseur a au moins une ligne avant de le parcourir, et utiliser des transactions pour des opérations d'écriture complexes pour garantir la cohérence .

SQLiteDatabase est la classe qui permet de manipuler une base de données SQLite sous Android grâce à un ensemble de méthodes qui permettent d'accéder à la base en lecture et en écriture. Elle propose des méthodes pour effectuer les opérations CRUD (Create, Read, Update, Delete), essentielles pour manipuler les données efficacement. Les méthodes getWritableDatabase() et getReadableDatabase() sont utilisées pour ouvrir la base de données, et les requêtes peuvent être exécutées via query() et rawQuery().

Les contraintes qui peuvent être définies incluent PRIMARY KEY pour désigner la clé primaire d'un attribut, NOT NULL pour indiquer qu'un attribut ne peut pas avoir de valeur NULL, CHECK pour vérifier la cohérence des valeurs, et DEFAULT pour stipuler une valeur par défaut pour un attribut .

La classe SharedPreferences, importée du package android.content.SharedPreferences, permet de manipuler des fichiers de préférences sous forme de données clé-valeur. Elle offre plusieurs méthodes, comme getPreferences et getSharedPreferences, pour accéder aux préférences. Les modes disponibles incluent MODE_PRIVATE, MODE_MULTI_PROCESS, et MODE_APPEND, selon les besoins de partage et de sécurité des préférences. Les modes WORLD_READABLE et WORLD_WRITEABLE sont dépréciés depuis l’API 17 et lancent une exception 'SecurityException' dans l’API 24 .

Android fournit plusieurs méthodes pour faire persister les données, comme l'utilisation d'entrées-sorties de type fichier, bases de données basées sur SQLite, données actives d'une activité, mécanisme de sauvegarde clé/valeur pour les fichiers de préférences partageables, et stockage via un serveur distant. Le choix de la méthode dépend des besoins, notamment s'il s'agit de données privées ou publiques, de la taille des données à conserver, et du choix entre le stockage local ou via le réseau .

Les fichiers stockés en interne sont liés à l'application, ce qui signifie qu'ils sont supprimés si l'application est désinstallée. Ce type de stockage est sécurisé pour les données privées, mais la mémoire interne limitée des appareils peut être un inconvénient. Il est généralement déconseillé d'y stocker de gros fichiers .

Il est important de toujours fermer la base de données et les curseurs après utilisation pour libérer les ressources. Avant de parcourir un curseur, il faut s'assurer qu'il contient au moins une ligne. Le Cursor permet d'accéder aux champs des enregistrements via des méthodes comme getInt(columnIndex) ou getString(columnIndex), et these must be handled carefully to avoid exceptions or incorrect data handling .

Pour sauvegarder des données avec Shared Preferences, on référence le fichier avec getSharedPreferences et utilise SharedPreferences.Editor pour enregistrer les données avec putXXX methods. Pour récupérer les données, on utilise la clé avec la méthode getXXX(clé, default) pour obtenir la valeur stockée. Ces préférences sont utiles pour sauvegarder de petites quantités de données persistantes .

Vous aimerez peut-être aussi