【问题标题】:Android Room Migration - java.lang.IllegalArgumentException: Parameter specified as non-null is nullAndroid 房间迁移 - java.lang.IllegalArgumentException:指定为非空的参数为空
【发布时间】:2019-08-13 17:57:30
【问题描述】:

我正在尝试向数据库中的现有表添加一列。栏目类型ArrayList<Date>我写了一个迁移步骤,增加了数据库版本号,添加了迁移。当我运行迁移(运行应用程序)时,出现错误:

java.lang.IllegalArgumentException:指定为非空的参数为空:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数值

尝试从该表中读取数据时。

我已尝试按照此处的步骤操作:https://medium.com/androiddevelopers/understanding-migrations-with-room-f01e04b07929

我也测试过其他数据类型,迁移成功。似乎问题在于添加列表或ArrayLists。

val MIGRATION_2_3 = object : Migration(2, 3) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL(
            "ALTER TABLE product ADD COLUMN ingredients TEXT"
        )
    }
}

【问题讨论】:

    标签: android database kotlin migration


    【解决方案1】:

    您正在更改表格但未设置默认值。因此,对于表中已经存在的所有行,默认值为 null。由于您要求 Kotlin 属性不为空,因此您会收到 IllegalArgumentException

    要解决此问题,您必须更改表以包含 ingredients 的默认值,并将其声明为非空。

    val MIGRATION_2_3 = object : Migration(2, 3) {
        override fun migrate(database: SupportSQLiteDatabase) {
            database.execSQL(
                "ALTER TABLE product ADD COLUMN ingredients TEXT NOT NULL DEFAULT ''"
            )
        }
    }
    

    或者,您可以将 ingredients Kotlin 属性设为 null。

    【讨论】:

    • 嘿@tynn,感谢您的回复,我实际上希望ingredients 属性可以为空。
    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2017-12-06
    • 2020-05-06
    • 2021-12-09
    相关资源
    最近更新 更多