我的app数据库类

@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

    }   

}

当前回答

我错过的时候出现了这个错误

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

确保上面注释中指定的实体模型引用特定的模型类,并确保必要的注释:

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

是正确定义的,你会很好吗

其他回答

对于那些使用Kotlin的人,尝试在应用程序build.gradle中将annotationProcessor更改为kapt

例如:

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

到应用程序级别构建的顶部。Gradle文件,并做一个清洁和重建(根据https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6)

在Android Studio中,如果在粘贴代码或构建过程中出现错误,请选择“构建>清洁项目”。然后选择Build > Rebuild Project,然后再次构建。


更新

如果您已经迁移到androidx

def room_version = "2.3.0" // check latest version from docs

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

更新2(自2021年7月起)

def room_version = "2.3.0" // check latest version from docs

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

对我来说,只要你包含任何与Room数据库相关的导入,Android Studio就会自动更新依赖项。但根据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()
    }
}

更新构建。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"

}

同步gradle,你应该可以开始了。

更改gradle文件中的依赖项并不能帮助我修复错误。我在房间数据库初始化的课堂上错过了这个数据库注释,这导致了这个问题。

@数据库(实体= [UserModel::class],版本= 1)

确保上面注释中指定的实体模型引用特定的模型类

针对Kotlin开发人员


如果你检查了Dao和Entity,也使用了Kapt,没有问题,我猜如果你使用kotlin 1.4及以上版本,你的kotlin版本有问题。 从这个链接更新房间到最新版本。


2.3.0-alpha03解决了我的问题。

同意以上回答

解决方法如下。如下所示,将annotationProcessor更改为kapt

// annotationProcessor "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"