Selon les documents :
Vous pouvez définir l'argument du processeur d'annotations (room.schemaLocation) pour indiquer à Room d'exporter le schéma dans un dossier. Même si ce n'est pas obligatoire, c'est une bonne pratique d'avoir l'historique des versions dans votre base de code et vous devez valider ce fichier dans votre système de contrôle de version (mais ne le livrez pas avec votre application!).
Donc, si vous n'avez pas besoin de vérifier le schéma et que vous souhaitez vous débarrasser de l'avertissement, ajoutez simplement exportSchema = false
à votre RoomDatabase
, comme suit.
@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}
Si vous suivez la réponse @mikejonesguy ci-dessous, vous suivrez la bonne pratique mentionnée dans la documentation :). Fondamentalement, vous obtiendrez un .json
fichier dans votre ../app/schemas/
dossier. Et cela ressemble à ceci:
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "53db508c5248423325bd5393a1c88c03",
"entities": [
{
"tableName": "sms_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message` TEXT, `date` INTEGER, `client_id` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER"
},
{
"fieldPath": "message",
"columnName": "message",
"affinity": "TEXT"
},
{
"fieldPath": "date",
"columnName": "date",
"affinity": "INTEGER"
},
{
"fieldPath": "clientId",
"columnName": "client_id",
"affinity": "INTEGER"
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [],
"foreignKeys": []
}
],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"53db508c5248423325bd5393a1c88c03\")"
]
}
}
Si ma compréhension est correcte, vous obtiendrez un tel fichier avec chaque mise à jour de la version de la base de données, afin que vous puissiez facilement suivre l'historique de votre base de données.
Dans le
build.gradle
fichier de votre module d'application, ajoutez-le à ladefaultConfig
section (sous laandroid
section). Cela écrira le schéma dans unschemas
sous - dossier de votre dossier de projet.Comme ça:
la source
app/schemas
répertoire par cette opération. Et j'ai entendu dire que nous devrions placer le schéma dans un répertoire qui n'est pas inclus dans leapk
. Comment pouvons-nous faire cela?Kotlin? Et c'est parti:
N'oubliez pas le plugin:
apply plugin: 'kotlin-kapt'
Pour plus d'informations sur le processeur d'annotations kotlin, veuillez visiter: Kotlin docs
la source
Les réponses ci-dessus sont correctes. Cette version est facile à suivre:
Parce que "le répertoire d'exportation de schéma n'est pas fourni au processeur d'annotation", nous devons donc fournir le répertoire pour l'exportation de schéma:
Ou
(car la valeur par défaut est toujours vraie)
$ projectDir : est un nom de variable, vous ne pouvez pas le changer. il obtiendra votre propre répertoire de projet
schémas : est une chaîne, vous pouvez la changer en celle que vous voulez. Par exemple:
"$projectDir/MyOwnSchemas".toString()
la source
build.gradle(project:????)
et nonbuild.gradle(app:????)
?La réponse @mikejonesguy est parfaite, juste au cas où vous prévoyez de tester les migrations de salle (recommandé), ajoutez l'emplacement du schéma aux ensembles source.
build.gradle
la source
J'utilise des
.kts
fichiers Gradle (Kotlin Gradle DSL) et lekotlin-kapt
plugin mais j'obtiens toujours une erreur de compilation de script lorsque j'utilise la réponse d'Ivanov Maksim.Pour moi, c'est la seule chose qui a fonctionné:
la source
Vous n'avez probablement pas ajouté votre classe de chambre à la classe enfant
RoomDatabase
enfant dans@Database(entities = {your_classes})
la source