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

Kotlin/Room错误:指定为非null的参数为null:方法Kotlin。jvm。内部的内在的。CheckParametersNotFull,参数消息

赏航
2023-03-14

不确定是什么原因导致了这种情况,但我正在尝试从api请求数据,该api包含一个消息对象数组。如果我将结果打印到控制台,则数据是正确的,除了Messages=null之外,我希望Message是一个对象数组。我不明白我错过了什么?

我得到了这个错误:java。lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin。jvm。内部的内在的。检查参数完整,参数消息

谁能给我指一下正确的方向吗?课程代码如下:

const val PROFILE_RESPONSE_ID = 0

@Entity(tableName = "profile")
data class ProfileResponse(
    val id: Int,
    val name: String,
    val code: String,
    val title: String,
    @SerializedName("profile_image")
    val profileImage: String,
    @SerializedName("background_image")
    val backgroundImage: String,
    @Embedded(prefix = "messages_")
    val messages: ArrayList<Messages>,
) {
    @PrimaryKey(autoGenerate = false)
    var responseId: Int = PROFILE_RESPONSE_ID
}

示例JSON:

{
  "id": 44,
  "name": "Jason",
  "code": "jason",
  "title": "Jason Scott",
  "profile_image": "https://sampleurl.com/sample_profile.jpg",
  "background_image": "",
  "messages": [
    {
      "id": 0001,
      "message": "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.",
      "timestamp": "Thu, 01 Jan 1970 01:00:00 +0100",
    }
    {
      "id": 0002,
      "message": "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.",
      "timestamp": "Thu, 01 Jan 1970 01:00:00 +0100",
    }
    {
      "id": 0003,
      "message": "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.",
      "timestamp": "Thu, 01 Jan 1970 01:00:00 +0100",
    }
}

共有1个答案

蒯卓君
2023-03-14

通过删除@Embedded解决了这个问题,因为我不一定需要另一个表中的数据,并添加了一个TypeConverter将列表转换为字符串并返回(这个问题很有帮助)。供其他人参考:

类型转换器类

class Convertors {

    @TypeConverter
    fun listToJson(value: List<Message>?): String {
        return Gson().toJson(value)
    }

    @TypeConverter
    fun jsonToList(value: String): List<Message>? {
        val objects = Gson().fromJson(value, Array<Message>::class.java) as Array<Message>
        val list = objects.toList()
        return list
    }

}

然后将@TypeConverters添加到我的数据库类中。

数据库

@Database(entities = [ProfileResponse::class], version = 1)
@TypeConverters(Convertors::class)
abstract class MainDatabase: RoomDatabase() {

    abstract fun profileResponseDao(): ProfileResponseDao

}
 类似资料: