RoomDatabase_Impl不存在

时间:2018-03-11 20:06:09

标签: android android-gradle android-architecture-components

我在尝试实施Room数据库时遇到以下错误:

java.lang.RuntimeException: cannot find implementation for com.udacity.gradle.builditbigger.Database.HilarityUserDatabase. HilarityUserDatabase_Impl does not exist
                                                 at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:92)

我尝试将相关的kotlin依赖项添加到我的gradle文件中(如下所示),但是当我这样做时,通常会生成任何问题的所有Databinding类现在都会在我的gradle控制台中生成错误。我有办法使用DataBinding库和Room Pesistence Library吗?

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
...
dependencies{
    kapt "android.arch.persistence.room:compiler:1.0.0"
}

7 个答案:

答案 0 :(得分:14)

之前我确实遇到过这种情况,请确保在build.gradle中有所有3个依赖项

implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor  'android.arch.persistence.room:compiler:1.0.0'
kapt 'android.arch.persistence.room:compiler:1.0.0'

此外,gradle synch之后的“Project Clean”也会有所帮助。

答案 1 :(得分:5)

确保 kotlin-kapt 已包含在应用程序级gradle文件中。

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

并确保您使用 kapt 而不是 annotationProcessor 。那解决了我的问题。

还要检查Room Model,DAO和数据库文件中的@ Entity,@ Dao和@Database批注。

答案 2 :(得分:0)

对于Room,LiveData和ViewModel的使用,您需要这些库:

•implementation "android.arch.persistence.room:runtime:1.0.0" •implementation "android.arch.lifecycle:extensions:1.1.0" •kapt "android.arch.persistence.room:compiler:1.0.0" •kapt "android.arch.lifecycle:compiler:1.1.0"

LiveData和ViewModel允许您使用DataBinding技术。

有关详细信息,请查看官方页面:https://developer.android.com/topic/libraries/architecture/adding-components.html

答案 3 :(得分:0)

对于新版本的Room编译器,无需添加两个依赖项,只需执行以下操作-

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

答案 4 :(得分:0)

如上所述,为方便起见

1-在文件顶部的build.gradle(Module:app)中添加以下内容

apply plugin: 'kotlin-kapt'

2-然后添加

//Room for database
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
implementation 'android.arch.persistence.room:runtime:1.1.1'
kapt 'android.arch.persistence.room:compiler:1.1.1'

3-同步文件并清理项目。完成

答案 5 :(得分:0)

我遇到了同样的问题,后来发现我没有为 AppDatabase 使用 @Database 注释

使用这个

@Database(entities = {RowEntity.class, WifiDetailEntity.class}, version = 1)

public abstract class AppDatabase extends RoomDatabase

{ ...

答案 6 :(得分:0)

在做 Codelab 时遇到了类似的问题。我能够通过在我的 build.gradle(module) 上添加更新的 Room 依赖项来解决它。

您可以从 Android 开发者网站的 Room 文档页面复制并粘贴实现声明。 (注意:检查你的依赖列表

implementation 'androidx.room:room-runtime:2.2.5'

或类似的,确保删除它,只留下你复制和粘贴的,看起来像这样

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

)

Room | Android Developers #Declaring Dependencies