我在尝试实施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"
}
答案 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"
)