0Pricing
Android Academy · Leçon

Proto DataStore

Stockez des données structurées et typées.

Proto DataStore est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.

Proto DataStore

Proto DataStore stocke des objets structurés fortement typés plutôt que des paires clé-valeur non structurées. Vous définissez un schéma et DataStore stocke un objet typé par fichier.

Il est idéal lorsque vos paramètres forment un modèle cohérent.

Pourquoi utiliser des données typées

Preferences DataStore n’est pas typé : une faute de frappe dans une clé ou la lecture du mauvais type n’échoue qu’à l’exécution. Proto DataStore vous offre une sûreté de type à la compilation pour l’ensemble de l’objet de paramètres.

  • Aucune clé textuelle susceptible de contenir une faute de frappe
  • Valeurs par défaut définies dans le schéma
  • Champs faciles à remanier

Choix du format de sérialisation

L’approche classique utilise les Protocol Buffers (proto) pour définir le schéma. Vous pouvez également sérialiser avec kotlinx.serialization ou avec un format personnalisé. Le schéma décrit les champs et les types.

Définition d’un schéma Proto

Vous écrivez un fichier .proto décrivant le message de vos paramètres. Le compilateur protobuf génère une classe Kotlin/Java à partir de celui-ci.

syntax = "proto3";

option java_package = "com.example.app";
option java_multiple_files = true;

message UserSettings {
  bool dark_mode = 1;
  int32 font_size = 2;
  string username = 3;
}

Implémentation d’un sérialiseur

DataStore a besoin d’un Serializer qui sait lire et écrire votre type dans un flux, ainsi que d’un defaultValue utilisé lorsque le fichier est vide.

object UserSettingsSerializer : Serializer<UserSettings> {
    override val defaultValue: UserSettings = UserSettings.getDefaultInstance()

    override suspend fun readFrom(input: InputStream): UserSettings =
        UserSettings.parseFrom(input)

    override suspend fun writeTo(t: UserSettings, output: OutputStream) =
        t.writeTo(output)
}

Création de Proto DataStore

Utilisez le délégué dataStore (et non preferencesDataStore), en lui transmettant le nom du fichier et votre sérialiseur.

val Context.settingsStore: DataStore<UserSettings> by dataStore(
    fileName = "user_settings.pb",
    serializer = UserSettingsSerializer
)

Lecture de données typées

Les lectures passent par settingsStore.data, mais le type du flux est désormais celui de votre modèle. Aucune clé ni conversion de type : accédez simplement aux champs directement.

val darkMode: Flow<Boolean> = context.settingsStore.data
    .map { settings -> settings.darkMode }

Écriture avec updateData

Proto DataStore remplace edit par la fonction suspendue updateData. Vous recevez l’objet actuel et en renvoyez un nouveau. Avec protobuf, vous utilisez le générateur créé par le compilateur.

suspend fun setDarkMode(enabled: Boolean) {
    context.settingsStore.updateData { current ->
        current.toBuilder()
            .setDarkMode(enabled)
            .build()
    }
}

Mises à jour immuables

Remarquez que vous ne modifiez jamais l’objet existant : vous en construisez et en renvoyez un nouveau. Cette immutabilité rend les mises à jour transactionnelles et cohérentes pour tous les observateurs.

Gestion de la corruption

Si le fichier stocké devient illisible, DataStore déclenche une CorruptionException. Vous pouvez fournir un corruptionHandler qui renvoie une valeur par défaut sûre au lieu de provoquer un plantage.

val Context.settingsStore by dataStore(
    fileName = "user_settings.pb",
    serializer = UserSettingsSerializer,
    corruptionHandler = ReplaceFileCorruptionHandler {
        UserSettings.getDefaultInstance()
    }
)

Preferences ou Proto

Faites votre choix selon vos besoins :

  • Preferences : quelques indicateurs indépendants, configuration rapide, aucun schéma
  • Proto : modèle de paramètres structuré, sûreté de type, valeurs par défaut définies

Les deux reposent sur les mêmes fondations asynchrones, transactionnelles et basées sur Flow.

Vérification rapide

Vérifiez votre compréhension de Proto DataStore.

Récapitulatif

Vous avez appris à stocker des données typées avec Proto DataStore :

  • Définir un schéma, souvent avec Protocol Buffers
  • Implémenter un Serializer avec un defaultValue
  • Créer le magasin au moyen du délégué dataStore
  • Lire directement les champs et écrire avec updateData
  • Gérer la corruption avec un gestionnaire qui renvoie une valeur par défaut

Vous avez terminé le cours sur DataStore.

Questions Fréquemment Posées

La leçon « Proto DataStore » est-elle gratuite ?

Oui — le texte complet de « Proto DataStore » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Proto DataStore » ?

Stockez des données structurées et typées. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Android Academy ?

Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Proto DataStore » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?

Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. DataStore ou SharedPreferences
  2. DataStore de préférences
  3. Lire et écrire des paramètres
  4. Proto DataStore
← Retour à Android Academy