gpt4 book ai didi

kotlin - 如何限制绑定(bind)到数据库列的 Int 值?

转载 作者:行者123 更新时间:2023-12-04 13:08:09 25 4
gpt4 key购买 nike

数据类:

// Entity of query
@Entity(tableName = TABLE_NAME)
data class HistoryItem(
@PrimaryKey(autoGenerate = true)
val id: Int,

@ColumnInfo(name = SEARCHED_DOMAIN)
val searchedDomain: String,

@ColumnInfo(name = STATUS)
val status: Int,
)

状态对象:

object Statuses { 
const val FAILURE = 0
const val NOT_FOUND = 1
const val FOUND = 2
}

如何使 val status: Int 始终为 FAILURE 或 NOT_FOUND 或 FOUND?我认为它应该是这样的:

@Status
@ColumnInfo(name = STATUS)
val status: Int

但是怎么做呢?

最佳答案

我建议使用 enum class为此:

enum class Status { 
FAILURE, NOT_FOUND, FOUND;
}

@Entity(tableName = TABLE_NAME)
data class HistoryItem(
@PrimaryKey(autoGenerate = true)
val id: Int,

@ColumnInfo(name = SEARCHED_DOMAIN)
val searchedDomain: String,

@ColumnInfo(name = STATUS)
val status: Status
)

但是,旧版本的 Android Room(2.3.0 之前)不会自动转换枚举类,因此如果您使用这些类,则需要使用类型转换器:

class Converters {

@TypeConverter
fun toStatus(value: Int) = enumValues<Status>()[value]

@TypeConverter
fun fromStatus(value: Status) = value.ordinal
}

这需要您将以下内容添加到您的数据库定义中:

@TypeConverters(Converters::class)

另见 this answer .

关于kotlin - 如何限制绑定(bind)到数据库列的 Int 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68409894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com