【错误记录】Android 中使用 Room 框架访问数据库报错 ( cannot find implementation for xx.xxDatabase. xxDatabase_Impl )

这篇具有很好参考价值的文章主要介绍了【错误记录】Android 中使用 Room 框架访问数据库报错 ( cannot find implementation for xx.xxDatabase. xxDatabase_Impl )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。





一、报错信息



在 Android 中 , 使用 Room 数据库访问框架操作数据库 , 运行是报如下错误 ;

核心报错信息 : cannot find implementation for xx.xxDatabase. xxDatabase_Impl does not exist

cannot find implementation for kim.hsl.roomdemo.StudentDatabase. StudentDatabase_Impl does not exist

完整报错信息 :

2023-05-10 15:22:18.829 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: kim.hsl.roomdemo, PID: 27608
    java.lang.RuntimeException: Unable to start activity ComponentInfo{kim.hsl.roomdemo/kim.hsl.roomdemo.MainActivity}: java.lang.RuntimeException: cannot find implementation for kim.hsl.roomdemo.StudentDatabase. StudentDatabase_Impl does not exist
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4631)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4842)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:113)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2928)
        at android.os.Handler.dispatchMessage(Handler.java:117)
        at android.os.Looper.loopOnce(Looper.java:205)
        at android.os.Looper.loop(Looper.java:293)
        at android.app.ActivityThread.main(ActivityThread.java:9596)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1204)
     Caused by: java.lang.RuntimeException: cannot find implementation for kim.hsl.roomdemo.StudentDatabase. StudentDatabase_Impl does not exist
        at androidx.room.Room.getGeneratedImplementation(Room.java:94)
        at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:952)
        at kim.hsl.roomdemo.StudentDatabase$Companion.inst(StudentDatabase.kt:29)
        at kim.hsl.roomdemo.MainActivity.onCreate(MainActivity.kt:18)
        at android.app.Activity.performCreate(Activity.java:8488)
        at android.app.Activity.performCreate(Activity.java:8461)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1343)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4602)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4842) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:113) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2928) 
        at android.os.Handler.dispatchMessage(Handler.java:117) 
        at android.os.Looper.loopOnce(Looper.java:205) 
        at android.os.Looper.loop(Looper.java:293) 
        at android.app.ActivityThread.main(ActivityThread.java:9596) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1204) 

【错误记录】Android 中使用 Room 框架访问数据库报错 ( cannot find implementation for xx.xxDatabase. xxDatabase_Impl )





二、解决方案



出现上述问题 , 只可能有两个方向出错 :

  • 依赖配置错误 : 没有正确配置 Room 依赖 ;
  • 注解使用错误 : 写代码时 , 没有写对

如果使用的是 Kotlin 语言开发 , 导入依赖库时 , 需要使用 kapt 导入注解处理器 ;

    // 导入 Room 依赖库
    implementation 'androidx.room:room-runtime:2.2.5'
    // 导入注解处理器
    kapt 'androidx.room:room-compiler:2.2.5'

如果使用的是 Java 语言开发 , 则在导入依赖库时 , 需要使用 annotationProcessor 导入注解处理器 ;

    // 导入 Room 依赖库
    implementation 'androidx.room:room-runtime:2.2.5'
    // 导入注解处理器
    //annotationProcessor 'androidx.room:room-compiler:2.2.5'

上述问题的错误就是使用 Kotlin 语言开发 , 使用 annotationProcessor 导入注解处理器 ;





三、注解使用错误



出现上述问题 , 只可能有两个方向出错 :

  • 依赖配置错误 : 没有正确配置 Room 依赖 ;
  • 注解使用错误 : 写代码时 , 没有写对

下面分析注解使用错误 :

检查是否使用了正确的注解来标记 Room 数据库、实体和 DAO。

在代码中,应该使用 @Database、@Entity 和 @Dao 等注解来标记相应的类和接口。

检查 Room 数据库的实现类是否生成成功。

在 Android Studio 中,可以查看项目的 app/build/generated/source/kapt/debug 目录,检查是否有名为 StudentDatabase_Impl 的 Java 类文件。

【错误记录】Android 中使用 Room 框架访问数据库报错 ( cannot find implementation for xx.xxDatabase. xxDatabase_Impl )

如果该文件不存在,则可能是由于 Room 的 kapt 编译过程出现了错误,需要查看编译日志并修复相应的错误。





四、检查代码混淆错误



如果您的项目使用了混淆或压缩功能,需要在 proguard 文件中添加 Room 相关的规则,以避免混淆 Room 相关的类和接口。在混淆规则中,可以添加以下代码:

-keep class kim.hsl.roomdemo.StudentDatabase { *; }
-keepclassmembers class kim.hsl.roomdemo.StudentDatabase { *; }
-keep class kim.hsl.roomdemo.StudentDatabase$* { *; }
-keepclassmembers class kim.hsl.roomdemo.StudentDatabase$* { *; }

-keep class kim.hsl.roomdemo.Student { *; }
-keepclassmembers class kim.hsl.roomdemo.Student { *; }
-keep class kim.hsl.roomdemo.Student$* { *; }
-keepclassmembers class kim.hsl.roomdemo.Student$* { *; }

-keep interface kim.hsl.roomdemo.StudentDao { *; }
-keepclassmembers interface kim.hsl.roomdemo.StudentDao { *; }

这些规则将保留 Room 相关的类和接口,避免混淆或压缩导致的问题。

如果以上方法都不能解决问题,可以尝试清除项目并重新构建,或者使用 Android Studio 中的 Invalidate Caches / Restart 功能来尝试解决问题。文章来源地址https://www.toymoban.com/news/detail-441978.html

到了这里,关于【错误记录】Android 中使用 Room 框架访问数据库报错 ( cannot find implementation for xx.xxDatabase. xxDatabase_Impl )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包