当前位置: 首页 > 知识库问答 >
问题:

在kotlin首次建立房间数据库时如何修复异常

须衡虑
2023-03-14

在第一次创建房间数据库时,我不断遇到这种异常

  java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Package.getName()' on a null object reference

这是我的房间数据库代码:

@Database(entities = [Channel::class], version = 1)
abstract class ChannelRoomDatabase : RoomDatabase() {

    abstract fun channelDao(): ChannelDao

    companion object {
        private var INSTANCE: ChannelRoomDatabase? = null

        fun getInstance(application: Application): ChannelRoomDatabase? {
            if (INSTANCE == null) {

                    INSTANCE = Room.databaseBuilder(application,
                            ChannelRoomDatabase::class.java,
                            "channels")
                            .build()
            }

            return INSTANCE
        }
    }

}

还有格雷德尔密码:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    kapt "android.arch.persistence.room:compiler:$room_version"

在构建项目时,我也会遇到这样的错误:

Execution failed for task ':app:kaptGenerateStubsDebugKotlin'.

Folder /home/Desktop/MySendBird/app/build/generated/source/kaptKotlin/debug


Folder /home/Desktop/MySendBird/app/build/generated/source/kaptKotlin/release


3rd-party Gradle plug-ins may be the cause

原因可能是什么?我在这里看到过类似的问题,但没有任何线索。请帮忙!

使现代化在我的刀中,我得到了这个错误

那么,如何让@Query理解它,我给它一个java字符串,而不是Kotlin字符串

另请参阅stackTrack:

/home/Desktop/MySendBird/app/build/tmp/kapt3/stubs/debug/ChannelRoomDatabase.java:6: warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false.
public abstract class ChannelRoomDatabase extends android.arch.persistence.room.RoomDatabase {
                ^
:app:compileDebugKotlin
w: /home/Desktop/MySendBird/app/src/main/java/com/example/anna/mysendbird/repository/ChannelRepository.kt: (16, 13): Variable 'db' is never used
w: /home/Desktop/MySendBird/app/src/main/java/com/example/anna/mysendbird/repository/ChannelRepository.kt: (47, 23): Parameter 'channel' is never used
w: /home/Desktop/MySendBird/app/src/main/java/com/example/anna/mysendbird/view/MainActivity.kt: (179, 29): Parameter 'userId' is never used

查看类似的问题:

使用Room with kotlin,在构建数据库时会出现异常

当我试图构建房间时,空对象引用

共有1个答案

江华容
2023-03-14

您收到Android房间架构目录错误

/home/Desktop/MySendBird/app/build/tmp/kapt3/stubs/debug/ChannelRoomDatabase.java:6: warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false.
public abstract class ChannelRoomDatabase extends android.arch.persistence.room.RoomDatabase {

架构导出目录未提供给批注处理器

您需要将模式目录添加到应用程序的gradle中。构建如下所示,

android {

    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }

}

这将告诉房间注释处理器生成数据库模式,并将其放在“Room.schemaLocation”

 类似资料:
  • 这是一个自我回答的问题,我想在早些时候问这个问题,因为我的项目中存在代表曝光问题,但经过几个小时的研究,最终还是解决了这个问题。与其保持沉默,我想这可能会对将来的人有所帮助。本教程演示了如何创建Room数据库并在活动/片段中使用它。这里给出的示例用例是查询数据库的大小并更新片段中的视图。 注意:下面的代码中有一些 Dagger-Hilt 依赖项注入,但如果您手动执行自己的依赖项注入,则应应用相同的

  • 我转换java代码到kotlin代码,我得到类型未解决的java类错误。 我的Java类是 已转换的Kotlin类 非常感谢。

  • 我尝试在Android房间中附加数据库,如下所示:如何从Android房间中的多个数据库中进行选择(如何附加数据库),但在构建项目时出现错误:错误:查询有问题:[SQLITE\u错误]SQL错误或缺少数据库(没有这样的表:database.table)错误 当我添加@SkipQuery验证时,错误发生了变化:错误:不确定如何将游标转换为此方法的返回类型。 当我从查询中删除“myDatabase.”

  • 错误:查询有问题:[SQLITE_ERROR]SQL错误或缺少数据库(没有这样的表:任务) 显示了这个错误,我怎么可能修复它? 我正在学习这个教程

  • 并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。

  • 我是新来的和我试图我的得到一个从它。我试图这样做的它与这是id但问题是我不知道如何返回目标从。 这就是<代码>刀 这是Repository类