178 votes

Persistance de la salle Android: AppDatabase_Impl n'existe pas

Ma classe de base de données d'application

 @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:+"
 

Et quand je demande par exemple que cela donnera cette erreur, AppDatabase_Impl n’existe pas dans ma classe d’application

 public class APp extends Application {

    private boolean appRunning = false;

    @Override
    public void onCreate() {
        super.onCreate();
        AppDatabase.getAppDatabase(this); //--AppDatabase_Impl does not exist

    }   

}
 

380voto

RWIL Points 3984

Pour ceux qui travaillent avec Kotlin, essayez de changer de annotationProcessor de kapt dans les apps build.gradle

par exemple:

// Extensions = ViewModel + LiveData
implementation "android.arch.lifecycle:extensions:1.1.0"
kapt "android.arch.lifecycle:compiler:1.1.0"
// Room
implementation "android.arch.persistence.room:runtime:1.0.0"
kapt "android.arch.persistence.room:compiler:1.0.0"

aussi n'oubliez pas d'ajouter appliquer plugin: 'kotlin-kapt' vers le haut de l'app niveau de la construction.gradle de fichiers et d'effectuer un travail propre et de reconstruction (selon https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6)

Dans Android Studio, si vous obtenez une erreur lorsque vous collez le code ou pendant le processus de génération, sélectionnez créer >Nettoyage de Projet. Puis sélectionnez " Build > Projet de Reconstruction, puis de construire à nouveau.

84voto

Jahangir Kabir Points 344

Juste utiliser

 apply plugin: 'kotlin-kapt'
 

dans l'application build.gradle

Et garder les deux dans les dépendances

 annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"
kapt "android.arch.persistence.room:compiler:$rootProject.roomVersion"
 

MODIFIER

Dans les versions plus récentes, il n'est pas nécessaire d'ajouter les deux dépendances à la fois. Il suffit d'utiliser, espérons que cela fonctionnera.

 kapt 'android.arch.persistence.room:compiler:1.1.1'
 

24voto

Ainojie Ajayi Points 174

J'ai eu cette erreur quand j'ai raté

 @Database(entity="{<model.class>})
 

Assurez-vous que le modèle d'entité spécifié dans l'annotation ci-dessus fait référence à la classe de modèle particulière et que l'annotation nécessaire:

 @Entity(tableName = "<table_name>" ...)
 

est correctement défini et vous seriez bon

11voto

Idee Points 961

Il ne s'agit pas simplement de mettre à jour vos dépendances. Assurez-vous que toutes vos dépendances Room ont la même version.

 implementation 'android.arch.persistence.room:rxjava2:1.1.0-alpha2'
implementation 'android.arch.persistence.room:runtime:1.1.0-alpha2'
annotationProcessor "android.arch.persistence.room:compiler:1.1.0-alpha2"
 

Dans l'extrait de code ci-dessus, toutes les dépendances de ma pièce ont la même version 1.1.0-alpha2

8voto

ahsiu Points 93

J'ai rencontré ce problème parce que j'ai oublié les dépendances apt

 implementation "android.arch.lifecycle:extensions:$archLifecycleVersion"
implementation "android.arch.persistence.room:runtime:$archRoomVersion"
annotationProcessor "android.arch.lifecycle:compiler:$archLifecycleVersion"
annotationProcessor "android.arch.persistence.room:compiler:$archRoomVersion"
 

après avoir ajouté l'annotationProcessor et l'avoir reconstruit, le problème a été résolu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X