gpt4 book ai didi

android - 找不到数据库 Room 的实现

转载 作者:搜寻专家 更新时间:2023-11-01 08:22:13 25 4
gpt4 key购买 nike

我正在使用 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"

最佳答案

这是因为 kotlin 编译器不能很好地使用 @Database java 注释(为您生成 FilmsDatabase_Impl)。

所以要解决这个问题:

  • 首先你需要获取kapt插件来解析kotlin文件中的注解,将它添加到你的应用级gradle中:

    应用插件:'kotlin-kapt'

  • 然后将 Room 编译器的 annotationProcessor 替换为 kapt

    kapt "android.arch.persistence.room:compiler:1.0.0"

  • 现在再次编译项目,您应该会看到生成了样板代码并解决了上述错误。

关于android - 找不到数据库 Room 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49800913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com