Android 房间数据库:仍在获取“;没有为参数传递值';id'&引用;即使它是自动生成的

Android 房间数据库:仍在获取“;没有为参数传递值';id'&引用;即使它是自动生成的,android,kotlin,android-room,Android,Kotlin,Android Room,这是我的房间实体: @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).l

这是我的房间实体:

@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
传递一个参数。。但它是指按照实体中的说明自动生成的


知道为什么吗?

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

val match = MatchedUser(0)

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

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

val match=MatchedUser()

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

val match=MatchedUser(0,”)


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)
}
private fun pass(){
    CoroutineScope(coroutineContext).launch {
            val match = MatchedUser("1")
       CustomApplication.database?.matchedUsersDao()?.addMatchUid(match)
            Log.d(TAG, "Added matchId to DB")
        }
    return removeUser2()
}
现在,您可以通过只向数据类的
构造函数提供
match\u id
来插入数据,如下所示:

@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)
}
private fun pass(){
    CoroutineScope(coroutineContext).launch {
            val match = MatchedUser("1")
       CustomApplication.database?.matchedUsersDao()?.addMatchUid(match)
            Log.d(TAG, "Added matchId to DB")
        }
    return removeUser2()
}