Android Room DB - 在查询中使用另一个类的静态变量

Sam*_*zar 6 android android-room android-jetpack

当我在 DAO 类中编写查询时,我可以使用另一个类(或枚举)中的静态变量吗?如果可以的话请告诉我如何做?

我的意思是这样的:

public enum MessageState {
   NOTHING,
   PENDING,
   SEND
}
Run Code Online (Sandbox Code Playgroud)

在 DAO 类的查询语句中:

@Query("SELECT * FROM message_db WHERE state = :MessageState.PENDING.ordinal()")
Run Code Online (Sandbox Code Playgroud)

Aur*_*tas 6

将枚举作为默认参数传递给函数:

@Query("SELECT * FROM message_db WHERE state = :state")
fun getMessages(state: Int = MessageState.PENDING.ordinal()): List<Message>
Run Code Online (Sandbox Code Playgroud)

这样您就不需要在每次调用时都提供它,但可以获得相同的结果。


Alb*_*dez 1

您可以像 Java 中的普通字符串一样连接它:

@Query("SELECT * FROM message_db WHERE state = " + MessageState.PENDING.ordinal() + ")"
Run Code Online (Sandbox Code Playgroud)

如果您使用 Kotlin:

@Query("SELECT * FROM message_db WHERE state = ${MessageState.PENDING.ordinal()}")
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这个,但它给了我错误“属性值必须是常量” (3认同)
  • 好吧,我认为这并不重要,但似乎你不能在“注释”中使用“枚举”,它们在编译时不是恒定的,所以你应该使用真正的编译时常量。也许您可以找到解决方法,但我无法就此提供建议。 (3认同)