我的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

    }   

}

当前回答

我也遇到了同样的现象。

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

添加会导致另一个构建错误,但会从日志中跟踪原因。

在我的例子中,SQL实现中有一个错误。 修复之后,构建是成功的。

因此,您可能希望检查整个房间库的实现,而不是查看崩溃的局部函数。

其他回答

这个问题更多的是关于gradle构建中没有包含的正确的库。我有一个类似的问题,并补充了缺失

testImplementation“android.arch.persistence.room:测试:room_version美元

在2023年1月,我在重构我的代码以使用ServiceLocator类后遇到了类似的问题。

为了解决这个问题,我在更衣室里玩了很多次。它适用于2.5.0-alpha02

Version_room = "2.5.0-alpha02" <——build。gradle(项目)

 //Room
implementation "androidx.room:room-runtime:$version_room"
kapt "androidx.room:room-compiler:$version_room"
// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:$version_room"
implementation("androidx.room:room-guava:$version_room")

我在Android Eel 2020.1.1上运行以下程序:

Version_kotlin = "1.7.21" Version_android_gradle_plugin = "4.0.1"

我也有同样的问题。在一个由Android Studio创建的新示例项目中实现了几个类和接口: https://developer.android.com/training/data-storage/room/

上面提到的所有解决方案都没有帮助,根据我的数据库类所需的_Impl文件不是由Room生成的。最后,在终端中执行gradle clean build给了我提示,导致解决方案:

警告:没有向注释处理器提供模式导出目录,因此我们不能导出模式。你可以提供空间。schemaLocation注释处理器参数或将exportSchema设置为false。

我在数据库类中添加了参数exportSchema = false

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

然后它工作了,在generatedJava下的app模块中找到了这两个生成的文件:

AppDatabase_Impl UserDao_Impl

我不理解这种行为,因为参数是可选的,看 https://stackoverflow.com/a/44645943/3258117

以上答案都不起作用,我注意到当我使用2.3.0或2.4.2版本的房间时,这个问题仍然存在。但是,当我应用它时,2.5.0-alpha01版本工作得很好。

build.gradle:应用程序

def roomVersion = '2.5.0-alpha01'
implementation "androidx.room:room-ktx:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"
testImplementation "android.arch.persistence.room:testing:$roomVersion"

为了防止其他人犯和我一样的错误,不要将数据库类称为“database”,否则您将得到相同的错误。