Android From Scratch: comment stocker les données d'application localement - Moyens I/O

Android From Scratch: comment stocker les données d’application localement

En ce qui concerne la persistance des données d’application localement, les développeurs Android n’ont certainement que l’embarras du choix. En plus de l’accès direct aux zones de stockage interne et externe d’un appareil Android, la plate-forme Android propose des bases de données SQLite pour stocker des données relationnelles et des fichiers spéciaux pour stocker des paires clé-valeur. De plus, les applications Android peuvent également utiliser des bases de données tierces prenant en charge NoSQL.

Dans ce didacticiel, je vais vous montrer comment utiliser toutes ces options de stockage dans vos applications Android. Je vais également vous aider à comprendre comment choisir l’option de stockage la plus appropriée pour vos données.

Trouvez-vous plus facile d’apprendre avec la vidéo? Pourquoi ne pas consulter notre cours:

1. Stockage de paires clé-valeur

Si vous cherchez un moyen rapide de stocker quelques chaînes ou nombres, vous devriez envisager d’utiliser un préférences fichier. Les activités et services Android peuvent utiliser getDefaultSharedPreferences() méthode de la PreferenceManager classe pour obtenir une référence à un SharedPreferences objet qui peut être utilisé à la fois pour lire et écrire dans le fichier de préférences par défaut.

Pour commencer à écrire dans le fichier de préférences, vous devez appeler le edit() méthode de la SharedPreferences objet, qui renvoie un SharedPreferences.Editor objet.

le SharedPreferences.Editor object dispose de plusieurs méthodes intuitives que vous pouvez utiliser pour stocker de nouvelles paires clé-valeur dans le fichier de préférences. Par exemple, vous pouvez utiliser le putString() méthode pour mettre une paire clé-valeur dont la valeur est de type String. De même, vous pouvez utiliser le putFloat() méthode pour mettre une paire clé-valeur dont la valeur est de type float. L’extrait de code suivant crée trois paires clé-valeur:

Une fois que vous avez ajouté toutes les paires, vous devez appeler le commit() méthode de la SharedPreferences.Editor objet pour les faire persister.

Lecture à partir d’un SharedPreferences objet est beaucoup plus facile. Tout ce que vous avez à faire est d’appeler le get*() méthode. Par exemple, pour obtenir une paire clé-valeur dont la valeur est de type String, vous devez appeler le getString() méthode. Voici un extrait de code qui récupère toutes les valeurs que nous avons ajoutées précédemment:

Comme vous pouvez le voir dans le code ci-dessus, en tant que deuxième paramètre, tous les get*() Les méthodes attendent une valeur par défaut, qui est la valeur qui doit être renvoyée si la clé n’est pas présente dans le fichier de préférences.

Notez que les fichiers de préférences sont limités aux chaînes et aux types de données primitifs uniquement. Si vous souhaitez stocker des types de données plus complexes ou des données binaires, vous devez choisir une option de stockage différente.

2. Utilisation d’une base de données SQLite

Chaque application Android peut créer et utiliser des bases de données SQLite pour stocker de grandes quantités de données structurées. Comme vous le savez peut-être déjà, SQLite est non seulement léger, mais aussi très rapide. Si vous avez de l’expérience avec les systèmes de gestion de bases de données relationnelles et que vous connaissez à la fois SQL, qui est l’abréviation de Structured Query Language, et JDBC, qui est l’abréviation de Java Database Connectivity, cela peut être votre option de stockage préférée.

En relation :  Comment vérifier et échanger des cadeaux qui vous attendent sur Google Play

Pour créer une nouvelle base de données SQLite ou pour en ouvrir une qui existe déjà, vous pouvez utiliser le openOrCreateDatabase() méthode dans votre activité ou service. Comme arguments, vous devez passer le nom de votre base de données et le mode dans lequel vous souhaitez l’ouvrir. Le mode le plus utilisé est MODE_PRIVATE, ce qui garantit que la base de données n’est accessible qu’à votre application. Par exemple, voici comment ouvrir ou créer une base de données appelée my.db:

Une fois la base de données créée, vous pouvez utiliser le execSQL() méthode pour exécuter des instructions SQL dessus. Le code suivant vous montre comment utiliser le CREATE TABLE Instruction SQL pour créer une table appelée utilisateur, qui comporte trois colonnes:

Bien qu’il soit possible d’insérer de nouvelles lignes dans le tableau en utilisant le execSQL() méthode, il vaut mieux utiliser la insert() méthode à la place. le insert() la méthode attend un ContentValues objet contenant les valeurs de chaque colonne du tableau. UNE ContentValues objet est très similaire à un Map objet et contient des paires clé-valeur.

En voici deux ContentValues objets que vous pouvez utiliser avec user table:

Comme vous l’avez peut-être deviné, les clés que vous passez au put() doit correspondre aux noms des colonnes de la table.

Une fois votre ContentValues les objets sont prêts, vous pouvez les transmettre au insert() méthode avec le nom de la table.

Pour interroger la base de données, vous pouvez utiliser le rawQuery() méthode, qui renvoie un Cursor objet contenant les résultats de la requête.

UNE Cursor l’objet peut contenir zéro ou plusieurs lignes. Le moyen le plus simple de parcourir toutes ses lignes est d’appeler son moveToNext() méthode à l’intérieur d’un while boucle.

Pour récupérer la valeur d’une colonne individuelle, vous devez utiliser des méthodes telles que getString() et getInt(), qui attendent l’index de la colonne. Par exemple, voici comment récupérer toutes les valeurs que vous avez insérées dans le user table:

Une fois que vous avez récupéré tous les résultats de votre requête, assurez-vous d’appeler le close() méthode de la Cursor objet afin de libérer toutes les ressources qu’il détient.

De même, lorsque vous avez terminé toutes vos opérations de base de données, n’oubliez pas d’appeler le close() méthode de la SQLiteDatabase objet.

3. Utilisation du stockage interne

Chaque application Android est associée à un répertoire de stockage interne privé, dans lequel l’application peut stocker du texte et des fichiers binaires. Les fichiers contenus dans ce répertoire ne sont pas accessibles à l’utilisateur ou aux autres applications installées sur l’appareil de l’utilisateur. Ils sont également supprimés automatiquement lorsque l’utilisateur désinstalle l’application.

Avant de pouvoir utiliser le répertoire de stockage interne, vous devez déterminer son emplacement. Pour ce faire, vous pouvez appeler le getFilesDir() méthode, qui est disponible à la fois dans les activités et les services.

En relation :  Sixers News : Joel Embiid entre dans les protocoles de santé et de sécurité de la NBA ; On s'attend à manquer plusieurs semaines

Pour obtenir une référence à un fichier dans le répertoire, vous pouvez transmettre le nom du fichier ainsi que l’emplacement que vous avez déterminé. Par exemple, voici comment obtenir une référence à un fichier appelé alice.csv:

À partir de ce moment, vous pouvez utiliser vos connaissances des classes et méthodes d’E / S Java pour lire ou écrire dans le fichier. L’extrait de code suivant vous montre comment utiliser un FileOutputStream objet et son write() méthode pour écrire dans le fichier:

4. Utilisation du stockage externe

Étant donné que la capacité de stockage interne des appareils Android est généralement fixe, et souvent assez limitée, plusieurs appareils Android prennent en charge les supports de stockage externes tels que les cartes micro-SD amovibles. Je vous recommande d’utiliser cette option de stockage pour les fichiers volumineux, tels que les photos et les vidéos.

Contrairement au stockage interne, le stockage externe peut ne pas toujours être disponible. Par conséquent, vous devez toujours vérifier s’il est monté avant de l’utiliser. Pour ce faire, utilisez le getExternalStorageState() méthode de la Environment classe.

Une fois que vous êtes sûr que le stockage externe est disponible, vous pouvez obtenir le chemin du répertoire de stockage externe de votre application en appelant le getExternalFilesDir() méthode et passage null comme argument à cela. Vous pouvez ensuite utiliser le chemin d’accès aux fichiers de référence dans le répertoire. Par exemple, voici comment référencer un fichier appelé bob.jpg dans le répertoire de stockage externe de votre application:

En demandant à l’utilisateur de vous accorder le WRITE_EXTERNAL_STORAGE autorisation, vous pouvez obtenir un accès en lecture / écriture à l’ensemble du système de fichiers sur le stockage externe. Vous pouvez ensuite utiliser des répertoires publics connus pour stocker vos photos, films et autres fichiers multimédias. le Environment class propose une méthode appelée getExternalStoragePublicDirectory() pour déterminer les chemins de ces répertoires publics.

Par exemple, en passant la valeur Environment.DIRECTORY_PICTURES à la méthode, vous pouvez déterminer le chemin du répertoire public dans lequel vous pouvez stocker des photos. De même, si vous passez la valeur Environment.DIRECTORY_MOVIES à la méthode, vous obtenez le chemin du répertoire public dans lequel les films peuvent être stockés.

Voici comment référencer un fichier appelé bob.jpg dans le répertoire des images publiques:

Une fois que vous avez le File objet, vous pouvez à nouveau utiliser le FileInputStream et FileOutputStream classes pour y lire ou y écrire.

Conclusion

Vous savez désormais tirer le meilleur parti des options de stockage local fournies par le SDK Android. Quelle que soit l’option de stockage choisie, les opérations de lecture / écriture peuvent prendre du temps si de grandes quantités de données sont impliquées. Par conséquent, pour vous assurer que le thread d’interface utilisateur principal reste toujours réactif, vous devez envisager d’exécuter les opérations dans un thread différent.

Pour en savoir plus sur l’enregistrement local des données d’application, reportez-vous au site officiel guide de l’API de stockage de données.

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.