【发布时间】: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