【发布时间】:2021-07-10 05:55:13
【问题描述】:
我正在使用 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"
【问题讨论】:
-
您是否在
build.gradle的dependencies闭包中添加了注释处理器?见developer.android.com/topic/libraries/architecture/… -
是的,我做到了。刚刚添加到帖子中
-
标题中的错误与问题中的错误不同。你得到的是哪一个?如果您获得的是“可用的公共构造函数”,那将与您的
@Entity类或您的@Dao类上的方法返回的任何 POJO 相关联。 -
感谢您的收看!这不是正确的标题。我修好了
-
好的。注释处理器应该在模块内部的
build/generated/source/apt/debug/com/home/myapplication/films/storage/impl/中生成代码(例如,app/)。有什么显示在那里吗?
标签: android android-room