【问题标题】:Issue in query parameters:An Annotation argument must be a compile time constant查询参数中的问题:Annotation 参数必须是编译时常量
【发布时间】:2020-10-10 15:19:22
【问题描述】:

我正在尝试通过 Enum 设置房间查询参数:

enum class Status(val status:Int){
    NOTANSWERED(1),
    ANSWERED(2),
    WRONGANSWERED(3)
}

查询:

@Query("SELECT * FROM questions where status=${Status.NOTANSWERED.status}")
    suspend fun getNotAnsweredQuestions()

IDE 出错:

An Annotation argument must be a compile time constant

我也阅读了this topic,但没有解决我的问题

【问题讨论】:

  • 显示你的枚举数据库转换器

标签: android kotlin android-room


【解决方案1】:

查看最近的 issuetracker 讨论;就像IDE错误所说,您的值不是编译时间常数;无法直接在查询注释中使用枚举值或枚举值属性:https://issuetracker.google.com/issues/170235802

最后的评论 #5 (https://issuetracker.google.com/issues/170235802#comment5) 提出了一个相当简单的解决方法:创建另一个传递值的函数:

@Query("SELECT * FROM questions where status=:status")
protected suspend fun getQuestions(status: Int)

suspend fun getNotAnsweredQuestions() = getQuestions(Status.NOTANSWERED.status)

另外我推荐使用@TypeConverter,这样你就可以直接传递你的枚举值(Status.NOTANSWERED)而不是它们的属性(Status.NOTANSWERED.status)。

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2020-10-04
    相关资源
    最近更新 更多