gpt4 book ai didi

android - 在 Room 中编写基于某个枚举值进行选择的类型安全查询

转载 作者:行者123 更新时间:2023-12-02 13:07:53 48 4
gpt4 key购买 nike

在 Kotlin Android 项目中,我想要一个 Room 查询,在其中我选择数据库表中的记录,其中一个字段具有特定的枚举值。 Room 通过运行 TypeConverter 来存储我的枚举值将它们转换为 Int值(value)观。

这是我的Entity :

@Entity(tableName = "users")
class User(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,

@TypeConverters(UserType.Converter::class)
val type: UserType
)

enum class UserType {
Free,
Trial,
Paying;

object Converter {
@TypeConverter
fun toInt(userType: UserType): Int = userType.ordinal

@TypeConverter
fun fromInt(int: Int): UserType = values()[int]
}
}

这是我要写的查询:
@Dao
interface UserDao {
@Query("SELECT * FROM users WHERE type = ${UserType.Trial.ordinal}")
suspend fun getTrialUsers(): Array<User>
}

该代码的问题在于 Kotlin 需要 Query 的参数。注解是编译时常量,但 ordinal枚举的值不被视为编译时常量。 什么是类型安全的解决方法? 目前,我正在考虑的非类型安全解决方法是使用 const int 值而不是枚举。

最佳答案

你可以有一个简单的getUsers(type)用一个更好的界面包装查询,包括getTrialUsers() .

@Dao
abstract class UserDao {
@Query("SELECT * FROM users WHERE type = :type")
protected abstract suspend fun getUsers(type: Int): Array<User>

suspend fun getTrialUsers(): Array<User> = getUsers(UserType.Trial.ordinal)
}

关于android - 在 Room 中编写基于某个枚举值进行选择的类型安全查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57978293/

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