tutorial studio room library example ejemplo java android android-room

java - studio - Sala de Android persistente: AppDatabase_Impl no existe



room library android (15)

Mi clase de base de datos de aplicaciones

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

Y cuando pregunto, por ejemplo, dará este error, AppDatabase_Impl no existe en mi clase de aplicación

public class APp extends Application { private boolean appRunning = false; @Override public void onCreate() { super.onCreate(); AppDatabase.getAppDatabase(this); //--AppDatabase_Impl does not exist } }


El mismo fenómeno se me ocurrió.

siguiendo

apply plugin: ''kotlin-kapt''

Agregar provoca otro error de compilación pero rastrea la causa desde el registro.

En mi caso, hubo un error en la implementación de SQL. Después de arreglar, la construcción fue exitosa.

Por lo tanto, es posible que desee verificar la implementación de toda la biblioteca de la sala en lugar de mirar a los locales bloqueados.


El problema está más relacionado con la biblioteca correcta que no está incluida en la construcción de Gradle. Tuve un problema similar y agregué los que faltaban

testImplementation "android.arch.persistence.room:testing:$room_version


En mi caso, estaba probando la conectividad para la base de datos de la sala y puse la clase de prueba dentro del directorio que he creado dentro de la carpeta AndroidTest. Lo saqué del directorio personalizado, luego funcionó bastante bien.


Encontré este problema porque olvidé las dependencias de 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"

Después de agregar el AnnotationProcessor y reconstruirlo, el problema se resolvió.


La pregunta es bastante antigua, pero me he topado con esto hoy y ninguna de las respuestas proporcionadas me ayudó. Finalmente logré resolverlo notando que la documentation Google en realidad todavía se adopta a Java y no a Kotlin por defecto, en realidad han agregado un comentario que ignoré

Para Kotlin, use kapt en lugar de anotaciónProcessor

Entonces, en lugar de

annotationProcessor "androidx.room:room-compiler:$room_version"

Si está desarrollando con Kotlin, debe usar:

kapt "androidx.room:room-compiler:$room_version"


Me encuentro con el problema, porque olvido la anotación @Dao

@Dao public interface SearchHistoryDao { @Query("SELECT * FROM search_history") List<SearchHistory> getAll(); @Insert void insertAll(SearchHistory... histories); @Delete() void delete(SearchHistory history); }

Tutorial oficial de sala


No se trata solo de actualizar sus dependencias. Asegúrese de que todas las dependencias de su sala tengan la misma versión.

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"

En el fragmento de muestra anterior, todas las dependencias de mi sala tienen la misma versión 1.1.0-alpha2


Para aquellos que trabajan con Kotlin , intente cambiar annotationProcessor a kapt en las aplicaciones build.gradle

por ejemplo:

// 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"

también recuerde agregar el complemento de aplicación: ''kotlin-kapt'' en la parte superior del archivo build.gradle de nivel de aplicación y realice una limpieza y reconstrucción (de acuerdo con https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6 )

En Android Studio, si obtiene errores al pegar el código o durante el proceso de compilación, seleccione Compilar> Limpiar proyecto. Luego seleccione Compilar> Reconstruir proyecto y luego vuelva a compilar.


Solo usa

apply plugin: ''kotlin-kapt''

en la aplicación build.gradle

Y mantener ambos en dependencias

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

EDITAR

En la versión más reciente, no es necesario agregar ambas dependencias a la vez. Solo use, espero que funcione.

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


Tuve el mismo problema Implementé las pocas clases e interfaz como se dijo oficialmente en un nuevo proyecto de ejemplo creado por Android Studio: https://developer.android.com/training/data-storage/room/

Todas las soluciones mencionadas anteriormente no ayudaron, los archivos necesarios _Impl de acuerdo con mi clase de base de datos no fueron generados por Room. Finalmente, ejecutar gradle clean build en la terminal me dio la pista que condujo a la solución:

"advertencia: el directorio de exportación de esquema no se proporciona al procesador de anotación, por lo que no podemos exportar el esquema. Puede proporcionar el argumento del procesador de anotación room.schemaLocation O establecer exportSchema en falso".

Agregué el parámetro exportSchema = false en la clase de base de datos

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

Y luego funcionó, encontró estos dos archivos generados en el módulo de la aplicación en generadoJava:

  • AppDatabase_Impl
  • UserDao_Impl

No entiendo este comportamiento ya que se dice que el parámetro es opcional, consulte https://.com/a/44645943/3258117


Tuve este error cuando perdí

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

Asegúrese de que el modelo de entidad especificado en la anotación anterior se refiere a la clase de modelo particular y también asegúrese de que la anotación necesaria:

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

está bien definido y estarías bien


Use el siguiente enlace de gradle:

public class App extends Application { private boolean appRunning = false; @Override public void onCreate() { super.onCreate(); RoomDB.getInstance(this); //This will provide AppDatabase Instance }

Necesita crear una clase de singloton diferente y obtener la base de datos de aplicaciones de esta manera:

RoomDB.java

@Database(entities = arrayOf(User::class), version = 1, exportSchema = false) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }

App.java

apply plugin: ''kotlin-kapt''


asegúrese de agregar la dependencia correcta para la habitación en build.gradle

implementation "android.arch.persistence.room:runtime:1.1.1"

Y debajo de la línea en la parte superior

ext { roomVersion = ''2.1.0-alpha06'' } // Room components implementation "androidx.room:room-runtime:$rootProject.roomVersion" implementation "androidx.room:room-ktx:$rootProject.roomVersion" kapt "androidx.room:room-compiler:$rootProject.roomVersion" androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"


si está utilizando clases de kotlin para implementar la base de datos, use

compile ''android.arch.persistence.room:runtime:1.0.0-alpha9'' annotationProcessor ''android.arch.persistence.room:compiler:1.0.0-alpha9''

y

public class RoomDB { private static RoomDB INSTANCE; public static AppDatabase getInstance(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; }

en su archivo gradle, funcionará.


Para desarrolladores de Kotlin

Utilizar esta:

implementation "android.arch.persistence.room:runtime:1.0.0" kapt "android.arch.persistence.room:compiler:1.0.0"

Y agregue el apply plugin: ''kotlin-kapt'' en la parte superior del nivel de aplicación build.gradle .

Para desarrolladores de Java

implementation "android.arch.persistence.room:runtime:1.0.0" annotationProcessor "android.arch.persistence.room:compiler:1.0.0"