安卓应用中的简单房间查询不起作用



我正在学习一个Android开发教程,该教程使用Room存储数据并检索数据

我有以下实体:

@Entity
data class DogBreed(
@ColumnInfo(name = "breed_id")
val breedId: String?,
@ColumnInfo(name = "dog_name")
val dogBreed: String?,
@ColumnInfo(name = "life_span")
val lifeSpan: String?,
@ColumnInfo(name = "breed_group")
val breedGroup: String?,
@ColumnInfo(name = "bred_for")
val bredFor: String?,
val temperament: String?,
@ColumnInfo(name = "dog_url")
val imageUrl: String?
) {
@PrimaryKey(autoGenerate = true)
var uuid: Int = 0
}

以及以下DAO房间:

@Dao
interface DogDao {
@Insert
suspend fun insertAll(vararg dogs: DogBreed): List<Long>
@Query("SELECT * FROM dogbreed")
suspend fun getAllDogs(): List<DogBreed>
@Query("SELECT * FROM dogbreed WHERE uuid = :dogId")
suspend fun getDog(dogId: Int): DogBreed?
@Query("DELETE FROM dogbreed")
suspend fun deleteAllDogs()
}

insertAll方法运行良好。我可以使用getAllDogs()检索所有数据,并且uuid是按预期自动生成的。但是,getDog(dogId)方法不起作用。它总是返回null。这是一个简单的查询,我看不出有什么问题。可能是什么问题?

查询用于以下代码:

val dao = DogDatabase(getApplication()).dogDao()
val dog = dao.getDog(uuid)
Toast.makeText(getApplication(), "Dog from DB ${uuid} / $dog", Toast.LENGTH_SHORT).show()

吐司显示出类似";来自DB12/null的Dog";。

事实证明,从不同片段导航时作为操作参数提供的uuid不是正确的值。它是breedId而不是uuid属性。

我使用过Room几次,但您的uuId似乎是Int类型,而您在查询中使用的是String类型。据我记忆所及,sql查询必须使用like

我的猜测是,你必须同时使用Int值或String值,但不能混合使用。如果你使用String类型,请使用Like而不是相等。

"SELECT * FROM dogbreed WHERE uuid like :dogId"

最新更新