Room数据库:即使是自动生成的,仍然出现“未传递参数'id'的值”的错误提示。

8

以下是我的房间实体:

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

以下是我在Fragment中实例化它的示例:

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参数...但是根据实体中的说明,它应该是自动生成的。有任何想法吗?
3个回答

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

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)
}

现在,您可以仅通过向数据类的构造函数提供match_id来插入数据,就像这样:

现在,您可以通过仅向数据类的构造函数提供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()
}

1

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

val match = MatchedUser(0)

0
如果您正在使用Kotlin类,则必须通过次要构造函数或直接创建对象来为主构造函数分配默认值。
MatchedUser类内部的次要构造函数具有声明类型的默认值:
constructor():this(0, "")

val match = MatchedUser()

或者

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

val match = MatchedUser(0,"")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接