Android应用程序中的简单房间查询不起作用

Android应用程序中的简单房间查询不起作用,android,kotlin,android-room,Android,Kotlin,Android Room,我正在学习一个Android开发教程,它使用Room来存储和检索数据 我拥有以下实体: @Entity data class DogBreed( @ColumnInfo(name = "breed_id") val breedId: String?, @ColumnInfo(name = "dog_name") val dogBreed: String?, @ColumnInfo(name = "lif

我正在学习一个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
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()
}

toast显示了类似于DB12/null中的Dog的内容。

我用过几次Room,但您的uuId似乎是Int类型,并且您在查询中使用的是字符串类型。据我所知,sql查询必须使用like

我的猜测是,您必须同时使用Int值或字符串值,但不能混合使用。如果您使用的是字符串类型,请使用Like而不是equal


从Dogbride中选择*uuid like:dogId

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

确保将正确的id传递给getDog方法,以便它相应地检索数据,如果您还可以显示用于获取数据的代码的话dogs@takieddine参数值是正确的。我将添加一些代码。当您记录uuid时,它是nul还是not§@takieddine否uuid不为空,因为它也显示在toast消息中。请尝试使用此选项,而不是toast.makeTextgetApplication,Dog name为+Dog.DogBride,toast.LENGTH_SHORT.Show抱歉,切换到字符串是我在它不工作时尝试的。起初他们都是Int。我将更新问题,使它们再次为Int。
val dao = DogDatabase(getApplication()).dogDao()

val dog = dao.getDog(uuid)

Toast.makeText(getApplication(), "Dog from DB ${uuid} / $dog", Toast.LENGTH_SHORT).show()