Android房间数据库: get autogenerated id at time of assignment

标签 android android-room android-database

我有一个 android 数据库,其中有一个类似的实体

<表类=“s-表”> <标题> id(自动生成) 字符串 文件名 <正文> 0 牛 myFolder/0.mp3 3 羊 myFolder/3.mp3

换句话说,我想在分配实体后使用自动生成的 id 将其包含在文件名中。所以我想做这样的电话

data.insert("cow")

并让它自动分配一个 id 和一个格式为“myfolder/”+[id]+“.mp3”的文件名

如果我天真地尝试在实体主方法中执行此操作,使用 this.filename = "myfolder/"+this.id+".mp3"然后,由于 id 尚未设置,this.id返回其空值 (0)。

可以这样做吗?

最佳答案

您可以将 id 的类型更改为 String,每次插入新项目时都会生成一个新的 UUID 并将该 UUID 设置为 id 和文件名,如下所示:

suspend fun insertItem(string: String) {
    val uuid = UUID.randomUUID().toString()
    val item = Item(
        id = uuid,
        string = string,
        fileName = "myFolder/$uuid.mp3"
    )
    dataDao.insert(item)
}

如果您想在外部使用它来生成文件或其他内容,您甚至可以将该 uuid 作为参数传递给 insertItem 函数:

suspend fun insertItem(string: String, uuid: String) {
    val item = Item(
        id = uuid,
        string = string,
        fileName = "myFolder/$uuid.mp3"
    )
    dataDao.insert(item)
}

关于Android房间数据库: get autogenerated id at time of assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73544166/

相关文章:

android - 解析 XML 时出错 : not well-formed (invalid token)

android - setArguments() 到 fragment 时“fragment 已经激活”

android - 房间复合主键链接到外键

android - 房间 - SQLiteLog : (1) too many SQL variables

android - Android Pie 中的数据库导入问题?

android - 如何进行大于或小于 "Safe Casts"的比较

java - 如何计算 APK 中的方法调用? (使用 .smali 格式)

kotlin - get() 和 by lazy 之间的区别

java - 如何从注册号牌中获取车主信息?

android - Android Room 将预打包的数据库存储在缓存中是否正常?