提问人:Gleichmut 提问时间:4/12/2018 最后编辑:Gleichmut 更新时间:7/10/2021 访问量:5103
找不到数据库 Room 的实现
cannot find implementation for database Room
问:
我正在用 Room 编写我的第一个应用程序。我发现它在使用 kotlin 时有问题,甚至有些示例在我的机器上不起作用,所以我回滚到纯 Java。
FilmsDatabaseJ db = Room.databaseBuilder(getApplicationContext(), FilmsDatabase.class, "DATABASE_NAME").build();
此调用失败,并出现异常:
java.lang.RuntimeException: cannot find implementation for com.home.myapplication.films.storage.FilmsDatabase. FilmsDatabase_Impl does not exist
我探索了源代码,Room 希望已经有这样的类(是否在某处生成?),但由于某种原因,我的情况不存在这样的类,这与文档相距不远。您能分享一下您的想法吗?
@TypeConverters({Converters.class})
@Database(entities = {Film.class, User.class, UserFilms.class}, version = 1)
public abstract class FilmsDatabaseJ extends RoomDatabase {
private static final String DATABASE_NAME = "DATABASE_NAME";
private static FilmsDatabaseJ instance;
public abstract FilmsDaoJ getFilmsDao();
@NotNull
public static FilmsDatabaseJ getInstance(Context context) {
if (instance == null) {
synchronized (FilmsDatabaseJ.class) {
if (instance != null) return
instance = Room.databaseBuilder(context, FilmsDatabaseJ.class, DATABASE_NAME).build();
}
}
return instance;
}
}
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
// Room (use 1.1.0-beta2 for latest beta)
implementation "android.arch.persistence.room:runtime:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
答:
11赞
Trung Le
8/28/2018
#1
这是因为 kotlin 编译器不能很好地处理@Database java 注释(它会为您生成FilmsDatabase_Impl
因此,要解决这个问题:
首先,您需要获取插件来解析 kotlin 文件中的注释,将其添加到您的应用级 gradle 中:
kapt
apply plugin: 'kotlin-kapt'
然后替换为 room 的编译器
annotationProcessor
kapt
kapt "android.arch.persistence.room:compiler:1.0.0"
现在再次编译项目,您应该会看到这些样板代码生成并解决上述错误。
评论
0赞
Gleichmut
8/28/2018
谢谢。当我与Room合作一段时间时,可能已经找到了答案。我不记得了。我会在有时间验证时接受你的重播。
0赞
Trung Le
8/29/2018
是的,以防万一其他人在同样的问题上绊倒,希望它可能会有所帮助
0赞
dobhareach
2/4/2022
四 (4) 年后,有完全相同的问题!
0赞
Misael Antonio Peláez
7/10/2021
#2
溶液: def room_version = “2.3.0”
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:2.3.0"
评论
dependencies
build.gradle
@Entity
@Dao
build/generated/source/apt/debug/com/home/myapplication/films/storage/impl/
app/