Android应用程序中的简单房间查询不起作用
我正在学习一个Android开发教程,它使用Room来存储和检索数据 我拥有以下实体: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
@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()