【发布时间】:2020-07-24 15:10:45
【问题描述】:
我正在学习使用 Room 存储和检索数据的 Android 开发教程。
我有以下实体:
@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
}
以及以下 Room 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()
吐司显示类似“DB 12 中的狗 / null”。
【问题讨论】:
-
确保您将正确的 id 传递给您的 getDog() 方法,以便它相应地检索数据,如果您还可以显示您用来获取狗的代码
-
@takieddine 参数值正确。我会添加一些代码。
-
当你记录 uuid 时,是否为 nul §
-
@takieddine 不,uuid 不为空,因为它也显示在 toast 消息中。
-
试试这个 Toast.makeText(getApplication(), "Dog name is " + dog.dogBreed , Toast.LENGTH_SHORT).show()
标签: android kotlin android-room