【问题标题】:Android room not deleting cache properlyAndroid房间没有正确删除缓存
【发布时间】:2019-11-14 10:09:05
【问题描述】:

我有一个 room dao 界面,用于存储学校列表。这是dao接口-

@Dao
interface SchoolDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertSchools(schoolList: List<SchoolModel>)

    @Query("SELECT * from schoolTable")
    suspend fun querySchoolList(): List<SchoolModel>?

    @Query("DELETE from schoolTable")
    suspend fun deleteSchoolList()
}

这是我的缓存库-

override suspend fun storeSchool(schoolList: List<SchoolModel>) {
    schoolDao.insertSchools(schoolList)
}

override suspend fun deleteCache(): SchoolResult {
    schoolDao.deleteSchoolList()
    if (schoolDao.querySchoolList().isNullOrEmpty()) {
        return SchoolResult.EmptyNow
    }
    return SchoolResult.NotEmpty
}

override suspend fun getSchoolList(): SchoolResult {
    val result = schoolDao.querySchoolList()
    if (result != null && result.isNotEmpty()) {
        return SchoolResult.SchoolListContent(result)
    }
    return SchoolResult.Error(SchoolResult.ErrorType.SCHOOL_LIST_EMPTY)
}

问题是当我进行 API 调用时,该调用给了我 2 次上课时间,然后我将其存储。 现在我在服务器数据库上删除了一个学校项目,API 给了我 1 个学校项目,这完全没问题。 到现在一切都很好。现在,当我在手机上关闭互联网时,我希望从缓存中读取数据,缓存会给我 2 个项目。 房间缓存似乎没有更新。

【问题讨论】:

  • 您没有从房间中删除数据?你是如何更新数据库的?
  • 难道不能更新而不是删除和插入吗?
  • 也许你对存储在 db 中的项目的 equals 是错误的?您必须确保 db 能够识别“相同”的项目。
  • 您在数据库中插入了两行。现在,直到您删除该行,它将保留在数据库中。
  • @AmitTiwary 我不能通过 id 检查行是否存在,更新它否则插入它。

标签: android kotlin android-room


【解决方案1】:

您在提供的源代码中似乎没有问题。我认为这里的房间工作正常。您的问题很可能在其他级别,例如,在调用服务器 api 方法和数据库缓存的顺序中。 绝对不是房间里的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    相关资源
    最近更新 更多