Comment stocker des données sur Androïd ?
Dans ce cours dédié au stockage sur Android, nous allons étudier ensemble les différentes manières d'enregistrer (ou de faire persister) du contenu dans le téléphone de nos utilisateurs, de manière 100 % hors-ligne, c'est-à-dire sans avoir besoin d'internet !
Ainsi, nous allons découvrir les différents moyens que propose Android pour sauvegarder les données de notre application sur le téléphone de nos utilisateurs.
1. Souvenez vous des "Shared Preferences"
Dans le premier cours portant sur les applications du parcours Android, nous avons déjà abordé les SharedPreferences, qui sont un moyen de stocker des données primitives et simples : en somme, vous stockez uniquement des variables (valeurs), que vous récupérerez par la suite grâce à un identifiant unique (clé).
On appelle ce type de stockage le stockage par Clé/Valeur. Les variables (et leurs clés correspondantes) seront stockées automatiquement dans un fichier XML directement sur le téléphone de l'utilisateur. Ce fichier est défini en mode PRIVATE
pour n'autoriser l'accès à son contenu qu'à notre application.
2. Utilisez des bases de données
Afin de stocker des données structurées, Android vous offre nativement la possibilité d'utiliser une base de données de type SQLite. Ce type de stockage vous permettra d'organiser et faire persister de grosses quantités de données structurées, directement sur le téléphone de l'utilisateur, et manipulables grâce au langage SQL.
Nous parlerons plus précisément de SQLite et de son implémentation sur Android (avec Room) dans la deuxième partie de ce cours...
3. Distinguez bien le stockage interne du stockage externe
Afin de supporter le stockage de données sous forme de fichiers (photos, vidéos, PDF, etc.), les périphériques Android disposent de deux espaces de stockage : l'espace de stockage dit "interne" et l'espace de stockage dit "externe".
Ces noms assez communs proviennent de l'époque où la plupart des périphériques Android possédaient à la fois une mémoire interne non volatile physique et une mémoire amovible telle qu'une carte SD par exemple. Aujourd'hui, la mémoire amovible tend à disparaître et énormément de périphériques divisent dorénavant leur espace de stockage physique en partitions séparées : une partition pour la mémoire interne et une autre pour la mémoire externe.
Donc ces deux espaces de stockage existent toujours, non ? Même si le périphérique ne dispose d'aucun port pour des mémoires amovibles comme la carte SD ?
Exactement ! D'ailleurs, il existe quelques différences entre ces deux espaces de stockage :
| STOCKAGE INTERNE | STOCKAGE EXTERNE |
Disponibilité | Les fichiers stockés sur cet espace seront toujours disponibles. | Les fichiers stockés sur cet espace ne seront PAS TOUJOURS disponibles. En effet, ce stockage peut être retiré à tout moment par l'utilisateur (carte SD ou clé USB). |
Accessibilité | Les fichiers stockés sur cet espace ne seront accessibles QUE par votre application. | Les fichiers stockés sur cet espace seront accessibles par TOUT LE MONDE. Vous n'avez donc aucun contrôle dessus. |
Durée de vie | Quand l'utilisateur désinstalle votre application, les fichiers seront automatiquement supprimés de cet espace de stockage. | Quand l'utilisateur désinstalle votre application, les fichiers ne seront PAS supprimés de cet espace de stockage (sauf si vous l'avez explicitement défini). |
Quelques mots sur l'espace de stockage INTERNE
Par défaut, les fichiers stockés dans l'espace de stockage interne sont privés et ne seront accessibles QUE par votre application. Ils ne seront dès lors pas visibles par les autres applications ou par l'utilisateur lui-même (à moins que ce dernier possède un téléphone avec un accès root... ).
L'espace de stockage interne peut également être utilisé si vous souhaitez enregistrer des données temporairement, dans un dossier spécial dédié au cache. Ainsi, si jamais le téléphone de votre utilisateur est à court d'espace de stockage (ou si un logiciel de nettoyage comme Clean Master passe par là... ), le contenu de ce dossier sera automatiquement effacé pour libérer un peu d'espace.
Quelques mots sur l'espace de stockage EXTERNE
Les fichiers stockés dans l'espace de stockage externe sont à considérer comme étant publics et accessibles par tout le monde...
On y retrouve d'ailleurs les dossiers publics "Documents", "Téléchargements" ou encore "Musique". Vous n'avez donc aucun contrôle sur les fichiers enregistrés sur cet espace de stockage. Vous pourrez simplement les définir comme PUBLIC (le fichier ne sera pas effacé quand l'utilisateur désinstallera votre application) ou PRIVATE (le fichier sera effacé quand l'utilisateur désinstallera votre application).
Développez l'application SaveMyTrip
SaveMyTrip est la mini-application que nous développerons tout au long de ce cours. Son objectif est de pouvoir organiser facilement vos futurs voyages d'aventuriers, grâce à son fantastique carnet de voyage intégré ainsi qu'à sa liste interactive de choses à faire, le tout accessible de manière 100 % hors-ligne, forcément !
D'ailleurs, téléchargez maintenant cette mini-application SaveMyTrip presque vierge, à quelques fichiers près :
Fichiers de ressources : Les fichiers de ressources colors.xml, dimen.xml, strings.xml et styles.xml sont déjà pré-configurés.
Fichiers de layout : Afin d'alléger le code présent au sein des chapitres, le design en XML des 3 écrans de l'application a déjà été réalisé. N'hésitez pas à les consulter pour vous en imprégner.
Classes d'activités : Les classes d'activités MainActivity, TripBookActivity et TodoListActivity ont déjà été créées.
Librairies externes : La librairie Glide a été installée via Gradle.
Liaison entre le xml et le java : On utilise le viewBinding pour récupérer nos différents widgets dans le code java.
J'ai également choisi d'organiser la structure du projet en fonctionnalités, plutôt qu'en MVC. Cela ne change cependant pas le fait que notre architecture restera en MVC...
Le but de ce cours est de se concentrer sur la manière dont nous stockons des données sur Android et non sur la création d'interface graphique que vous devez à présent maîtriser. C'est d'ailleurs pour cette raison que nous ne partons pas d'une application totalement vierge...
Et c'est tout ! Lancez l'application SaveMyTrip. Le résultat devrait être le suivant :
Encore une fois, n'hésitez pas à vous imprégner du code de base déjà réalisé, afin de le comprendre un minimum. Vous allez voir, tout est simple et a été déjà vu dans les précédents cours... :)
En résumé
Il y a 3 façon de stocker des données localement :
les shared preferences pour stocker des données primitives et simples ;
les bases de données pour stocker des données structurées ;
le stockage interne et externe pour stocker des données sous forme de fichier.
Maintenant que vous connaissez la partie théorique sur les différentes manières de stocker des données localement, nous allons voir comment créer un fichier sur le stockage externe du smartphone.