【问题标题】:Room Database: Still getting "no value passed for parameter 'id' " even though it is meant to be autogenerated房间数据库:即使它是自动生成的,仍然得到“没有为参数 'id' 传递值”
【发布时间】:2019-08-25 12:30:40
【问题描述】:

这是我的房间实体:

@Entity(tableName = "matched_users")
data class MatchedUser(
    @PrimaryKey(autoGenerate = true) val id: Int,
    @ColumnInfo(name = "match_id") val matchId: String
)

这是我在我的片段中实例化它:

private fun pass(){
    CoroutineScope(coroutineContext).launch {
            val match = MatchedUser()
       CustomApplication.database?.matchedUsersDao()?.addMatchUid(match)
            Log.d(TAG, "Added matchId to DB")
        }
    return removeUser2()
}

当我将鼠标悬停在 MatchedUser() 上时,它仍然说我需要为 id 传递一个参数 .. 但它应该按照实体中的说明自动生成。

知道为什么吗?

【问题讨论】:

    标签: android kotlin android-room


    【解决方案1】:

    在kotlin数据类中,每个变量都应该被初始化,所以你可以在你的数据类构造函数中设置默认参数,像这样:

    @Entity(tableName = "matched_users")
    data class MatchedUser(
        @PrimaryKey(autoGenerate = true) val id: Int,
        @ColumnInfo(name = "match_id") val matchId: String
    ){
        constructor(matchId: String): this(Int.MIN_VALUE, matchId)
    }
    

    现在您可以通过仅向数据类的constructor 提供match_id 来插入数据,如下所示:

    private fun pass(){
        CoroutineScope(coroutineContext).launch {
                val match = MatchedUser("1")
           CustomApplication.database?.matchedUsersDao()?.addMatchUid(match)
                Log.d(TAG, "Added matchId to DB")
            }
        return removeUser2()
    }
    

    【讨论】:

      【解决方案2】:

      您必须在类 MatchedUser 中添加构造函数和 getter 方法。 然后创建一个参数 id = 0 的实例:

      val match = MatchedUser(0)
      

      【讨论】:

        【解决方案3】:

        如果您使用的是 Kotlin 类,则必须通过辅助构造函数或直接创建其对象为主构造函数分配默认值。

        MatchedUser 类中的辅助构造函数具有声明类型的默认值:

        constructor():this(0, "")
        

        val match = MatchedUser()

        或

        没有额外的构造函数,只需使用主构造函数初始化类对象:

        val match = MatchedUser(0,"")

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-21
          • 2020-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-27
          • 2021-02-02
          相关资源
          最近更新 更多