在 Android Studio 中实例化 Room 数据库

Instanciate Room database in Android Studio

我正在尝试在 Android Studio 中的主 activity 中实例化一个 Room 数据库,遵循代码实验室和教程,但我的应用程序总是崩溃。这是代码的一部分:

我的数据库(AppDatabase.kt):

@Database(entities = [Device::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {

    abstract fun deviceDao(): DeviceDao

    companion object {
        @Volatile
        private var INSTANCE: AppDatabase? = null
        fun getDatabase(context: Context): AppDatabase {
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "item_database"
                )
                    .fallbackToDestructiveMigration()
                    .build() // <---- The crash occurs here
                INSTANCE = instance
                return instance
            }
        }
    }

}

这里是我试图从中实例化它的 activity:

class NavigationActivity() : AppCompatActivity() {

    private lateinit var binding: ActivityNavigationBinding
    private val db by lazy {  AppDatabase.getDatabase(this) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityNavigationBinding.inflate(layoutInflater)
        setContentView(binding.root)

        Log.d("instantiation", "$db") // <----- Called from here

        val navView: BottomNavigationView = binding.navView
        val navController = findNavController(R.id.nav_host_fragment_activity_navigation)
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_devices, R.id.navigation_logs, R.id.navigation_settings
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
    }
}

最后,这是错误消息,对我帮助不大:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Package.getName()' on a null object reference
        at androidx.room.Room.getGeneratedImplementation(Room.java:82)
        at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:1486)
        at AppDatabase$Companion.getDatabase(AppDatabase.kt:24)

我尝试了很多东西,包括 ViewModel、Repository 等等,但在同一点系统地崩溃了。

这也是我的 build.gradle 文件中导入 Room 的部分,也许我在某些版本或其他方面有误...

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-android'
    id 'kotlin-kapt'
}

[...]

def roomVersion = "2.4.2"
    implementation("androidx.room:room-runtime:$roomVersion")
    kapt("androidx.room:room-compiler:$roomVersion")
    implementation "androidx.room:room-ktx:$roomVersion"

确保在 class 之上声明了 package 声明,例如:

    package com.macrosystems.clean.ui.core.view 

    import android.content.Context
    import android.content.Intent
    import android.graphics.Color
    etc...