首页 > 解决方案 > 房间用构造函数生成 id

问题描述

我使用的是 Room DB,我有需要生成 id 的类:

@Entity
data class TaskEntity(
@PrimaryKey(autoGenerate = true) var uid: Long?,
@ColumnInfo(name = "title") var title: String?,
@ColumnInfo(name = "start") var startTime: Long?,
@ColumnInfo(name = "duration") var duration: Long?,
): Serializable {

 constructor(
) : this(null, "", 0, 0)
}

在活动中,我将在运行时初始化 cals 并设置参数:

var task: TaskEntity
task = TaskEntity()
task.name = cal.name
.... 

道类:

@Dao
interface TasksDao {
@Query("SELECT * FROM  taskentity ORDER BY startTime ASC")
fun getAllTasks(): List<TaskEntity>

@Insert
fun insert(item: TaskEntity)

@Delete
fun delete(item: TaskEntity)

@Update
fun update(item: TaskEntity)

}

但是 ID 始终为 null,就像在构造函数中一样。我在一些文档中看到如果它为空,它将自动生成。我错过了什么?

标签: kotlinandroid-room

解决方案


您已经手动创建了对象,TaskEntity所以它uid是 null
或者初始值允许具有主键和标志的整数字段 所以我想最好写null0autoGenerate

@PrimaryKey(autoGenerate = true) var uid: Long,
// ...
) : this(0L, "", 0, 0)

推荐阅读