Stay organized with collections Save and categorize content based on your preferences.

DataStore

Stockez les données de manière asynchrone, cohérente et transactionnelle, en éliminant certains inconvénients de SharedPreferences.
Dernière mise à jour Version stable Version admissible Version bêta Version alpha
9 novembre 2022 1.0.0 - - 1.1.0-alpha01

Déclarer des dépendances

Pour ajouter une dépendance sur DataStore, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Il existe deux implémentations de DataStore : Preferences et Proto. Choisissez l'une ou l'autre. Vous pouvez également ajouter des dépendances sans Android à chaque implémentation.

Ajoutez les dépendances de l'implémentation dont vous avez besoin dans le fichier build.gradle de votre application ou module :

Preferences DataStore

Groovy

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation "androidx.datastore:datastore-preferences:1.0.0"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.0.0"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-preferences-rxjava3:1.0.0"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-preferences-core:1.0.0"
    }
    

Kotlin

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation("androidx.datastore:datastore-preferences:1.0.0")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.0.0")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-preferences-rxjava3:1.0.0")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-preferences-core:1.0.0")
    }
    

Proto DataStore

Groovy

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation "androidx.datastore:datastore:1.0.0"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.0.0"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-rxjava3:1.0.0"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-core:1.0.0"
    }
    

Kotlin

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation("androidx.datastore:datastore:1.0.0")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.0.0")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-rxjava3:1.0.0")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-core:1.0.0")
    }
    

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 1.1

Version 1.1.0-alpha01

9 novembre 2022

Publication de androidx.datastore:datastore-*:1.1.0-alpha01. Liste des commits de la version 1.1.0-alpha01

Nouvelles fonctionnalités

  • Compatibilité avec les cas d'utilisation multiprocessus où la cohérence des données est garantie entre les instances DataStore sur l'ensemble des processus. Ajout de MultiProcessDataStoreFactory#create pour créer ces instances DataStore.
  • Nouvelle interface de stockage permettant de désactiver le mécanisme de stockage sous-jacent pour Datastore. Des implémentations sont fournies pour java.io et okio. Les fabriques DataStore disposent de nouvelles méthodes qui acceptent cet objet Storage.

Modifications apportées à l'API

  • Modification des API dans le MultiProcessDataStoreFactory datastore-core pour utiliser Storage. (Iac02f)
  • Déplacement des API publiques de datastore-multiprocess vers datastore-core. (I76d7c)
  • PreferencesSerializer exposé à partir de datastore-preferences-core. (I4b788)

Version 1.0.0

Version 1.0.0

4 août 2021

Publication de androidx.datastore:datastore-*:1.0.0. Liste des commits de la version 1.0.0

Principales fonctionnalités de la version 1.0.0

Jetpack DataStore est une solution de stockage de données qui vous permet de stocker des paires clé-valeur ou des objets typés avec des tampons de protocole. DataStore utilise les coroutines Kotlin et Flow pour stocker les données de manière asynchrone, cohérente et transactionnelle.

Version 1.0.0-rc02

21 juillet 2021

Publication de androidx.datastore:datastore-*:1.0.0-rc02. Liste des commits de la version 1.0.0-rc02

Correction de bugs

  • Mise à jour de la documentation pour préciser que SharedPreferencesMigration ne s'exécute pas en l'absence de clés. (Icfa32, b/192824325)
  • Correction d'un bug où SharedPreferencesMigration, construit avec MIGRATE_ALL_KEYS, générait une exception si la clé demandée n'existait pas déjà. (Ie318a, b/192824325)

Version 1.0.0-rc01

30 juin 2021

Publication de androidx.datastore:datastore-*:1.0.0-rc01. Liste des commits de la version 1.0.0-rc01

Correction de bugs

  • Correction du bug qui provoquait l'ajout involontaire du fichier .java dans le fichier JAR final. (I65d96, b/188985637)

Version 1.0.0-beta02

16 juin 2021

Publication de androidx.datastore:datastore-*:1.0.0-beta02. Liste des commits de la version 1.0.0-beta02

Correction de bugs

  • Correction de ClassVerificationFailure. (b/187450483)

Version 1.0.0-beta01

21 avril 2021

Publication de androidx.datastore:datastore-*:1.0.0-beta01. Liste des commits de la version 1.0.0-beta01

Modifications apportées à l'API

  • Suppression des surcharges JVM pour les méthodes en Kotlin uniquement. (I2adc7)

Correction de bugs

  • Correction d'un bug qui provoquait la fuite de contextes par les délégués du datastore. (Ie96fc, b/184415662)

Version 1.0.0-alpha08

10 mars 2021

Publication de androidx.datastore:datastore-*:1.0.0-alpha08. Liste des commits de la version 1.0.0-alpha08

Modifications apportées à l'API

  • Prise en charge de l'ajout d'une migration en fonction du contexte à dataStore et au délégué de propriété preferencesDataStore. (I4ef69, b/173726702)
  • Ajout de fonctions d'assistance permettant d'obtenir le nom du fichier si vous n'utilisez plus le délégué du datastore ni context.createDataStore. (I60f9a)
  • Reclassement des fonctions Serializer writeTo et readFrom comme fonctions de suspension. Si vous avez implémenté un Serializer, vous devrez convertir vos fonctions en fonctions de suspension. (I1e58e)
  • Ajout de délégués de propriété pour les utilisateurs de RxDataStore. (Ied768, b/173726702)

Correction de bugs

  • Application forcée des restrictions sur l'utilisation publique des API expérimentales. (I6aa29, b/174531520)

Version 1.0.0-alpha07

24 février 2021

Publication de androidx.datastore:datastore-*:1.0.0-alpha07. Liste des commits de la version 1.0.0-alpha07

Modifications apportées à l'API

  • Suppression de la fonction d'extension Context.createDataStore, remplacée par le délégué de propriété globalDataStore. Appelez globalDataStore une fois au niveau supérieur de votre fichier Kotlin. Exemple :

    val Context.myDataStore by dataStore(...)
    

    Placez-le au niveau supérieur du fichier Kotlin afin de n'ajouter qu'une seule instance. (I57215, b/173726702)

  • Reclassement des fonctions RxDataStore comme une classe RxDataStore, et non plus comme des fonctions d'extension de DataStore. (Idccdb, b/177691248)

  • Ajout d'un nouveau constructeur SharedPreferencesMigration, qui permet de migrer des EncryptedSharedPreferences (ou des SharedPreferences de démarrage direct) vers DataStore et d'injecter les SharedPreferences. (I8e04e, b/177278510)

Correction de bugs

  • Mise à jour de DataStore, qui génère désormais une exception lorsque plusieurs DataStores sont actifs pour le même fichier. Si vous ne gérez pas votre DataStore en tant que Singleton ou ne vérifiez pas qu'une seule instance de DataStore est active à la fois pour un fichier, des exceptions peuvent maintenant s'afficher lors de la lecture ou de l'écriture sur DataStore. Vous pouvez résoudre ces problèmes en gérant votre DataStore en tant que Singleton. (Ib43f4, b/177691248)
  • Correction du comportement en cas d'annulation du champ d'application de l'appelant. (I2c7b3)

Version 1.0.0-alpha06

13 janvier 2021

Publication de androidx.datastore:datastore-*:1.0.0-alpha06. Liste des commits de la version 1.0.0-alpha06

Nouvelles fonctionnalités

  • Ajout de wrappers RxJava pour DataStore. Les artefacts datastore-rxjava2/3 contiennent les wrappers des API DataStore principales (RxDataStore, RxDataStoreBuilder et RxDataMigration). Les artefacts datastore-preferences-rxjava2/3 contiennent un compilateur permettant de créer un Preferences DataStore.

Modifications apportées à l'API

  • Masquage de l'interface CorruptionHandler. Il n'y avait aucune raison de la rendre publique, car la fabrique DataStore n'accepte qu'un ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
  • Suppression de la méthode preferencesKey<T>(name: String): Key<T>, remplacée par des méthodes propres à chaque type compatible. Par exemple, preferencesKey<Int>("int") devient intPreferencesKey("int"). (Icfcfa, b/170311106)

Correction de bugs

  • Correction de la documentation sur DataStoreFactory afin de préciser que le fichier du datastore est créé dans le sous-répertoire "datastore/". (Ica222)

Version 1.0.0-alpha05

2 décembre 2020

Publication de androidx.datastore:datastore-*:1.0.0-alpha05. Liste des commits de la version 1.0.0-alpha05

Correction de bugs

  • Ajout d'une documentation et d'exceptions plus pertinentes concernant les écritures simultanées à partir de datastores. (Ia98a2, b/173522155, b/173726702)
  • Prise en charge de la fermeture du OutputStream transmis à Serializer.writeTo(), sans obligation. (I5c9bf, b/173037611)

Version 1.0.0-alpha04

17 novembre 2020

Publication de androidx.datastore:datastore-*:1.0.0-alpha04. Liste des commits de la version 1.0.0-alpha04

Correction de bugs

  • Correction d'un problème de packaging qui provoquait le plantage suivant dans Preferences DataStore 1.0.0-alpha03 : java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

Version 1.0.0-alpha03

11 novembre 2020

Publication de androidx.datastore:datastore-*:1.0.0-alpha03. Liste des commits de la version 1.0.0-alpha03

Nouvelles fonctionnalités

  • Mise à jour de Preferences, qui prend désormais en charge les valeurs doubles (utile pour une meilleure précision comparé aux floats). (I5be8f, b/169471808)

Modifications apportées à l'API

  • Création d'une dépendance Kotlin pure pour le datastore permettant d'accélérer la compilation. androidx.datastore:datastore-core contient les API principales exclusivement en Kotlin et androidx.datastore:datastore contient les API qui dépendent d'Android (y compris SharedPreferencesMigration et le constructeur Context.createDataStore). (I42d75, b/168512698)
  • Division des cibles de Preferences DataStore pour une compilation Kotlin plus rapide. (Ia3c19)
  • Mise à jour des sérialiseurs, qui nécessitent désormais une nouvelle propriété pour la valeur par défaut, qui sera utilisée si le disque ne contient pas de données. Cela facilite l'implémentation des sérialiseurs personnalisés. Ainsi, les utilisateurs n'ont pas besoin de prévoir spécialement des flux d'entrée vides (ces flux ne peuvent pas être analysés avec JSON).

    • En outre, le système vérifie désormais que le flux de sortie fourni à writeTo() n'est pas fermé. Si c'est le cas, il génère des exceptions. (I16e29)
  • Conversion du constructeur de SharedPreferencesView en constructeur interne. À l'origine, il était accessible publiquement pour les tests. Il est préférable d'effectuer les tests en créant un SharedPreferencesMigration. (I93891)

Correction de bugs

  • Mise à jour du paramètre produceFile sur DataStoreFactory et PreferenceDataStoreFactory, qui figure désormais en dernier dans la liste. Vous pouvez donc utiliser la syntaxe lambda de fin de Kotlin. (Ibe7f1, b/169425442)
  • Application des nouvelles exigences concernant les API explicites pour Kotlin. (I5ae1e)

Problèmes connus

  • Plantage de Preferences DataStore avec java.lang.NoClassDefFoundError. (b/173036843)

Version 1.0.0-alpha02

14 octobre 2020

Publication de androidx.datastore:datastore-core:1.0.0-alpha02 et androidx.datastore:datastore-preferences:1.0.0-alpha02. Liste des commits de la version 1.0.0-alpha02

Correction de bugs

  • Ajout d'une protection contre les mutations dans datastore-core. La mutation bloque l'utilisation d'un DataStore autre que Proto ou Preferences. (I6aa84)
  • Ajout d'une méthode toString à Preferences.kt pour faciliter le débogage de l'état actuel (I96006)
  • Ajout d'une exception pour éviter toute utilisation abusive de DataStore.Preferences. (I1134d)
  • Correction d'un bug qui provoquait le plantage de l'application au démarrage. (I69237, b/168580258)

Version 1.0.0-alpha01

2 septembre 2020

Publication de androidx.datastore:datastore-core:1.0.0-alpha01 et androidx.datastore:datastore-preferences:1.0.0-alpha01. Liste des commits de la version 1.0.0-alpha01

Nouvelles fonctionnalités

Jetpack DataStore est une nouvelle solution de stockage de données améliorée, destinée à remplacer SharedPreferences. Basé sur les coroutines Kotlin et Flow, DataStore propose deux implémentations différentes :

  • Proto DataStore, qui permet de stocker des objets typés (grâce à des tampons de protocole)
  • Preferences DataStore, qui stocke des paires clé-valeur

Les données sont stockées de manière asynchrone, cohérente et transactionnelle, permettant ainsi de pallier la plupart des inconvénients de SharedPreferences.