【问题标题】:simple Room query in Android app doesn't workAndroid应用程序中的简单房间查询不起作用
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我使用 Room 几次,但您的 uuId 似乎是 Int 类型,而您在查询中使用的是 String 类型。据我记得你必须使用like 进行sql 查询。

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

    "SELECT * FROM dogbreed WHERE uuid like :dogId"

    【讨论】:

    • 抱歉,切换到 String 是我在它不起作用时尝试过的。起初他们都是Int。我会更新问题,让他们再次成为 Int。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多