C'est parce que vous tentez de modifier le schéma de la base de données existante sans lui donner toute l'information sur les migrations. Donc, fondamentalement, il tente d'écrire le nouveau schéma de base de données pour la base de données existante qui ne fonctionne pas.
Il y a deux façons de contourner cela. Si vous êtes dans votre environnement de développement ce que vous pouvez faire est de repli à un destructeur de migration, pour ce faire, votre création de base de données de code devrait ressembler à quelque chose comme ce qui suit:
MyDatabase myDatabase = Room.databaseBuilder(context, MyDatabase.class, "my-db")
.fallbackToDestructiveMigration()
.build();
Cela signifie que lorsque vous fournir la base de données avec une mise à jour ou nouvelle entité, il va faire ce que la réponse de @huw dit et il suffit de supprimer la base de données sur l'installation de l'application suppression de toutes les données et vous donner une nouvelle installation.
L'autre méthode consiste à utiliser une migration de la fonction. Ils sont assez long, de sorte que si quelqu'un veut bien me l'écrire ici, je vais vous laisser pour aujourd'hui, mais, fondamentalement, la documentation peut être trouvée ici:
Salle de DB de la Migration de la Documentation
Essentiellement, cela provoque la DB pour exécuter SQL fournis par vous-même pour mettre à jour la base de données vers la nouvelle version. De cette façon vous pouvez vous assurer qu'aucun de vos données sont perdues lors de la migration; ou aussi peu que possible en fonction de ce que vous faites. C'est la méthode préférée pour la production apps que cela signifie que les utilisateurs ne perdent pas leurs données déjà existantes et vous n'obtiendrez pas beaucoup de colère reviews/des clients perdus.
J'espère que l'aide!