Мой класс базы данных приложения
@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:
compile "android.arch.persistence.room:runtime:+"
annotationProcessor "android.arch.persistence.room:compiler:+"
И когда я прошу, например, он выдаст эту ошибку, AppDatabase_Impl не существует в моем классе приложения
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
источник
источник
Ответы:
Для тех , кто работает с Котлин , попробуйте изменить ,
annotationProcessor
чтобыkapt
в приложенияхbuild.gradle
например:
// 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"
также не забудьте добавить этот плагин
apply plugin: 'kotlin-kapt'
в верхнюю часть файла build.gradle уровня приложения и выполните чистку и перестройку (согласно https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6 )
ОБНОВИТЬ
Если вы перешли на androidx
def room_version = "2.2.3" // check latest version from docs implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version"
источник
apply plugin: 'kotlin-kapt'
в началоbuild.gradle
файла уровня приложенияПросто используйте
apply plugin: 'kotlin-kapt'
в приложении build.gradle
И держите оба в зависимостях
annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion" kapt "android.arch.persistence.room:compiler:$rootProject.roomVersion"
РЕДАКТИРОВАТЬ
В более новой версии не нужно добавлять обе зависимости одновременно. Просто используйте, надеюсь, это сработает.
kapt 'android.arch.persistence.room:compiler:1.1.1'
источник
У меня была эта ошибка, когда я пропустил
@Database(entity="{<model.class>})
Убедитесь, что модель сущности, указанная в приведенной выше аннотации, относится к конкретному классу модели, а также убедитесь, что необходимая аннотация:
@Entity(tableName = "<table_name>" ...)
правильно определено, и все будет хорошо
источник
если вы используете классы kotlin для реализации базы данных, используйте
apply plugin: 'kotlin-kapt'
а также
kapt "android.arch.persistence.room:compiler:1.1.1"
в вашем файле gradle он будет работать.
источник
Речь идет не только об обновлении ваших зависимостей. Убедитесь, что все зависимости вашей комнаты имеют одинаковую версию.
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"
В приведенном выше примере фрагмента все зависимости моей комнаты имеют одинаковую версию.
1.1.0-alpha2
источник
Для разработчиков Kotlin
Использовать это:
implementation "android.arch.persistence.room:runtime:1.0.0" kapt "android.arch.persistence.room:compiler:1.0.0"
И добавить
apply plugin: 'kotlin-kapt'
в верхнюю часть уровня приложенияbuild.gradle
.Для разработчиков Java
implementation "android.arch.persistence.room:runtime:1.0.0" annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
источник
Я столкнулся с этой проблемой, потому что забыл подходящие зависимости
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"
после добавления annotationProcessor и его перестройки проблема решена.
источник
Встречаюсь с проблемой, потому что забываю
@Dao
аннотацию@Dao public interface SearchHistoryDao { @Query("SELECT * FROM search_history") List<SearchHistory> getAll(); @Insert void insertAll(SearchHistory... histories); @Delete() void delete(SearchHistory history); }
Официальное руководство по комнате
источник
не забудьте добавить правильную зависимость для комнаты в build.gradle
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"
И ниже линия вверху-
apply plugin: 'kotlin-kapt'
источник
Была такая же проблема. Реализованы несколько классов и интерфейс, как официально сказано в новом примерном проекте, созданном Android Studio: https://developer.android.com/training/data-storage/room/
Все упомянутые выше решения не помогли, необходимые файлы _Impl в соответствии с моим классом базы данных не были созданы Room. Наконец, выполнение gradle clean build в терминале дало мне подсказку, которая привела к решению:
«предупреждение: каталог экспорта схемы не предоставлен процессору аннотаций, поэтому мы не можем экспортировать схему. Вы можете либо
room.schemaLocation
указать аргумент обработчика аннотаций, либо установить для exportSchema значение false».Я добавил параметр exportSchema = false в класс базы данных
@Database(entities = arrayOf(User::class), version = 1, exportSchema = false) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }
И тогда это сработало, обнаружив эти два сгенерированных файла в модуле приложения под сгенерированной Java:
Я не понимаю этого поведения, поскольку параметр считается необязательным, см. Https://stackoverflow.com/a/44645943/3258117
источник
Вопрос довольно старый, но сегодня я наткнулся на него, и ни один из предоставленных ответов мне не помог. Наконец, мне удалось решить эту проблему, заметив, что документация Google на самом деле все еще адаптирована для Java, а не Kotlin по умолчанию, на самом деле они добавили комментарий, который я проигнорировал
Итак, вместо
annotationProcessor "androidx.room:room-compiler:$room_version"
Если вы разрабатываете на Kotlin, вам следует использовать:
kapt "androidx.room:room-compiler:$room_version"
источник
Используйте следующую ссылку gradle:
compile 'android.arch.persistence.room:runtime:1.0.0-alpha9' annotationProcessor 'android.arch.persistence.room:compiler:1.0.0-alpha9'
Вам нужно создать синглотонный класс diffretn и получить оттуда базу данных следующим образом:
RoomDB.java
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; }
App.java
public class App extends Application { private boolean appRunning = false; @Override public void onCreate() { super.onCreate(); RoomDB.getInstance(this); //This will provide AppDatabase Instance }
источник
В моем случае я тестировал возможность подключения к базе данных комнат и поместил тестовый класс в каталог, который я создал внутри папки AndroidTest. Я переместил его из пользовательского каталога, тогда он работал очень хорошо.
источник
TestDatabase
в код выпуска.То же самое произошло и со мной.
следующий
implementation "android.arch.persistence.room:runtime:1.1.1"
Добавление вызывает еще одну ошибку сборки, но отслеживает причину из журнала.
В моем случае в реализации SQL произошла ошибка. После исправления сборка прошла успешно.
Так что вы можете захотеть проверить реализацию всей библиотеки комнаты вместо того, чтобы смотреть на разбившихся местных жителей.
источник
Проблема больше связана с правильной библиотекой, которая не включена в сборку gradle. У меня была аналогичная проблема, и я добавил недостающий
источник
Изменение зависимостей в моем файле gradle не помогло мне исправить ошибку. Я пропустил эту аннотацию к базе данных в классе, где была инициализирована база данных Room, что вызывало эту проблему.
Убедитесь, что модель сущности, указанная в аннотации выше, относится к конкретному классу модели.
источник
В моем приложении kotlin я просто добавил следующую строку вверху файла build.gradle:
apply plugin: 'kotlin-kapt'
И следующая строка в разделе зависимостей:
kapt "androidx.room:room-compiler:2.2.5"
Надеюсь, это решит вашу проблему.
источник
Для меня Android Studio автоматически обновляет зависимости, как только вы включаете какой-либо импорт, связанный с базой данных Room. Но согласно https://developer.android.com/jetpack/androidx/releases/room#declaring_dependencies вам нужно обновить несколько. Вот как выглядит моя кодовая база:
AppDatabase.kt
import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase @Database(entities = arrayOf(MyEntity::class), version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun myDAO(): MyDAO companion object { @Volatile private var instance: AppDatabase? = null private val LOCK = Any() operator fun invoke(context: Context)= instance ?: synchronized(LOCK){ instance ?: buildDatabase(context).also { instance = it} } private fun buildDatabase(context: Context) = Room.databaseBuilder(context, AppDatabase::class.java, "db-name.db") .build() } }
Обновите build.gradle, как указано в одном из ответов:
apply plugin: 'kotlin-kapt' // this goes with other declared plugin at top dependencies { // add/update the following in dependencies section implementation 'androidx.room:room-runtime:2.2.3' // annotationProcessor 'androidx.room:room-compiler:2.2.3' // remove this and use the following kapt "androidx.room:room-compiler:2.2.3" }
Синхронизируйте градиент, и все будет в порядке.
источник
Чтение примера здесь: Пример помещения
Я исправил эту ошибку, просто используя правильный (я думаю, это) файл annotationProcessorFile, как показано ниже:
annotationProcessor "android.arch.persistence.room:compiler:<latest_version>"
Кроме того, я обновился до 2.2.0 как в версии для комнаты, так и в версии Lifecycle.
После синхронизации градиента я мог начать работать с Room.
Удачи! И пусть код будет с вами!
источник
Не в случае OP, но это также происходит, когда вы по ошибке используете реализацию вместо annotationProcessor, например:
implementation "android.arch.persistence.room:compiler:x.x.x"
Вместо этого:
annotationProcessor "android.arch.persistence.room:compiler:x.x.x"
источник