Remplir la base de données¶
Il n'y a pas de données dans la base de données. Vous pouvez ajouter des données de deux manières : en ajoutant des données lors de l'ouverture de la base de données ou en ajoutant une activité pour ajouter des mots.
Pour supprimer tout le contenu et remplir la base de données lors de l'installation de l'application, vous créez un RoomDatabase.Callback et remplacez la fonction onOpen().
Voici le code pour créer le rappel dans la classe WordRoomDatabase, dans le companion object, à côté de INSTANCE. Comme vous ne pouvez pas effectuer d'opérations sur la base de données Room sur le thread de l'interface utilisateur, onOpen() lance une coroutine dans une portée (CoroutineScope) dédiée aux écritures, qui s'exécute sur le thread d'arrière-plan Dispatchers.IO. La coroutine supprime le contenu de la base de données, puis la remplit avec les deux mots "Hello" et "World". N'hésitez pas à ajouter d'autres mots !
CoroutineScope(SupervisorJob() + Dispatchers.IO)crée une portée dont les coroutines s'exécutent sur le pool de threads dédié aux entrées/sorties. AvecSupervisorJob, l'échec d'une coroutine n'annule pas les autres.databaseScope.launch { ... }démarre une coroutine : les appels aux fonctionssuspenddu DAO (deleteAll(),insert()) y sont autorisés.INSTANCE?.wordDao()?.let { dao -> ... }n'exécute le bloc que si l'instance de la base de données existe (opérateur d'appel sécurisé?.).
Ensuite, ajoutez le callback à la séquence de construction de la base de données juste avant d'appeler .build() sur Room.databaseBuilder() :
| data/db/WordRoomDatabase.kt | |
|---|---|