Meine App-Datenbankklasse
@Database(entities = {Detail.class}, version = Constant.DATABASE_VERSION)
public abstract class AppDatabase extends RoomDatabase {
private static AppDatabase INSTANCE;
public abstract FavoritesDao favoritesDao();
public static AppDatabase getAppDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, Constant.DATABASE).allowMainThreadQueries().build();
//Room.inMemoryDatabaseBuilder(context.getApplicationContext(),AppDatabase.class).allowMainThreadQueries().build();
}
return INSTANCE;
}
public static void destroyInstance() {
INSTANCE = null;
}
}
Gradle lib:
compile "android.arch.persistence.room:runtime:+"
annotationProcessor "android.arch.persistence.room:compiler:+"
Und wenn ich zum Beispiel frage, wird es diesen Fehler geben, AppDatabase_Impl existiert nicht in meiner Anwendungsklasse
public class APp extends Application {
private boolean appRunning = false;
@Override
public void onCreate() {
super.onCreate();
AppDatabase.getAppDatabase(this); //--AppDatabase_Impl does not exist
}
}
java
android
android-room
pratik deshai
quelle
quelle
Antworten:
Für diejenigen , die arbeiten Kotlin , versuchen zu ändern ,
annotationProcessor
umkapt
in den Appsbuild.gradle
beispielsweise:
Denken Sie auch daran, dieses Plugin hinzuzufügen
Gehen Sie zum Anfang der build.gradle-Datei auf App-Ebene und führen Sie eine Bereinigung und Neuerstellung durch (gemäß https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6 ).
AKTUALISIEREN
Wenn Sie zu AndroidX migriert sind
quelle
apply plugin: 'kotlin-kapt'
um die Spitze der App - Ebenebuild.gradle
DateiBenutz einfach
in der App build.gradle
Und halten Sie beide in Abhängigkeiten
BEARBEITEN
In einer neueren Version müssen nicht beide Abhängigkeiten gleichzeitig hinzugefügt werden. Verwenden Sie einfach, hoffen Sie, dass es funktioniert.
quelle
Ich hatte diesen Fehler, als ich ihn verpasste
Stellen Sie sicher, dass sich das in der obigen Anmerkung angegebene Entitätsmodell auf die jeweilige Modellklasse bezieht, und stellen Sie außerdem sicher, dass die erforderliche Anmerkung:
ist richtig definiert und du wärst gut
quelle
Wenn Sie Kotlin-Klassen zum Implementieren der Datenbank verwenden, verwenden Sie
und
In Ihrer Gradle-Datei wird es funktionieren.
quelle
Es geht nicht nur darum, Ihre Abhängigkeiten zu aktualisieren. Stellen Sie sicher, dass alle Ihre Raumabhängigkeiten dieselbe Version haben.
Im obigen Beispiel-Snippet haben alle meine Room-Abhängigkeiten dieselbe Version
1.1.0-alpha2
quelle
Für Kotlin-Entwickler
Benutze das:
Und fügen Sie
apply plugin: 'kotlin-kapt'
zur Spitze der App-Ebene hinzubuild.gradle
.Für Java-Entwickler
quelle
Ich bin auf dieses Problem gestoßen, weil ich die passenden Abhängigkeiten vergessen habe
Nachdem Sie den annotationProcessor hinzugefügt und neu erstellt haben, wurde das Problem behoben.
quelle
Ich stoße auf das Problem, weil ich
@Dao
Anmerkungen vergesseRaum Offizielles Tutorial
quelle
Stellen Sie sicher, dass Sie die richtige Abhängigkeit für den Raum in build.gradle hinzufügen
Und unter der Zeile oben
quelle
Die Frage ist ziemlich alt, aber ich bin heute darauf gestoßen, und keine der Antworten hat mir geholfen. Schließlich gelang es mir, das Problem zu beheben, indem ich feststellte, dass die Google- Dokumentation tatsächlich immer noch in Java und nicht standardmäßig in Kotlin übernommen wird. Tatsächlich haben sie einen Kommentar hinzugefügt, den ich ignoriert habe
Also statt
annotationProcessor "androidx.room:room-compiler:$room_version"
Wenn Sie mit Kotlin entwickeln, sollten Sie Folgendes verwenden:
quelle
Hatte das gleiche Problem. Implementierte die wenigen Klassen und Schnittstellen, wie in einem neuen Beispielprojekt von Android Studio offiziell beschrieben: https://developer.android.com/training/data-storage/room/
Alle oben genannten Lösungen haben nicht geholfen, die erforderlichen _Impl-Dateien gemäß meiner Datenbankklasse wurden nicht von Room generiert. Das endgültige Ausführen von gradle clean build in terminal gab mir den Hinweis, der zur Lösung führte:
"Warnung: Das Schemaexportverzeichnis wird dem Anmerkungsprozessor nicht bereitgestellt, daher können wir das Schema nicht exportieren. Sie können entweder das
room.schemaLocation
Argument des Anmerkungsprozessors angeben oder exportSchema auf false setzen."Ich habe den Parameter exportSchema = false in der Datenbankklasse hinzugefügt
Und dann hat es geklappt, diese beiden generierten Dateien im App-Modul unter generateJava gefunden:
Ich verstehe dieses Verhalten nicht, da der Parameter als optional bezeichnet wird (siehe https://stackoverflow.com/a/44645943/3258117)
quelle
Verwenden Sie den folgenden Gradle-Link:
Sie müssen eine andere Singloton-Klasse erstellen und die Appdatabase wie folgt abrufen:
RoomDB.java
App.java
quelle
In meinem Fall habe ich die Konnektivität für die Raumdatenbank getestet und die Testklasse in das Verzeichnis gestellt, das ich im AndroidTest-Ordner erstellt habe. Ich habe es aus dem benutzerdefinierten Verzeichnis verschoben, dann hat es ziemlich gut funktioniert.
quelle
TestDatabase
im Release-Code haben.Das gleiche Phänomen kam mir in den Sinn.
folgenden
Das Hinzufügen verursacht einen weiteren Erstellungsfehler, verfolgt jedoch die Ursache aus dem Protokoll.
In meinem Fall ist ein Fehler in der SQL-Implementierung aufgetreten. Nach dem Reparieren war der Build erfolgreich.
Vielleicht möchten Sie die Implementierung der gesamten Raumbibliothek überprüfen, anstatt sich die abgestürzten Einheimischen anzusehen.
quelle
Das Problem liegt eher in der richtigen Bibliothek, die nicht im Gradle-Build enthalten ist. Ich hatte ein ähnliches Problem und fügte das fehlende hinzu
quelle
Das Ändern der Abhängigkeiten in meiner Gradle-Datei half mir nicht bei der Behebung des Fehlers. Ich hatte diese Datenbankanmerkung in der Klasse verpasst, in der die Raumdatenbank initialisiert wurde, was dieses Problem verursachte.
Stellen Sie sicher, dass sich das in der obigen Anmerkung angegebene Entitätsmodell auf die jeweilige Modellklasse bezieht
quelle
Für mich hat Android Studio Abhängigkeiten automatisch aktualisiert, sobald Sie Importe aus der Room-Datenbank einbeziehen. Aber gemäß https://developer.android.com/jetpack/androidx/releases/room#declaring_dependencies Sie jedoch einige aktualisieren. So sieht meine Codebasis aus:
AppDatabase.kt
Aktualisieren Sie das build.gradle wie in einer der Antworten angegeben:
Synchronisieren Sie den Gradle und Sie sollten bereit sein zu gehen.
quelle
Lesen Sie das Beispiel hier: Raumbeispiel
Ich habe diesen Fehler nur mit der richtigen (ich denke, es ist) annotationProcessorFile wie folgt behoben:
Außerdem habe ich entweder in der Room-Version wie in der Lifecycle-Version auf 2.2.0 aktualisiert.
Sobald das Graddle synchronisiert war, konnte ich mit Room arbeiten.
Also viel Glück! Und lass den Code bei dir sein!
quelle
In meiner Kotlin-App habe ich gerade die folgende Zeile oben in meiner build.gradle-Datei hinzugefügt:
Und die folgende Zeile im Abschnitt Abhängigkeiten:
Ich hoffe, es behebt Ihr Problem.
quelle
Nicht im Fall von OP, aber dies passiert auch, wenn Sie fälschlicherweise die Implementierung anstelle von annotationProcessor wie folgt verwenden:
An Stelle von:
quelle