У меня есть база данных, в которой есть таблица с несколькими столбцами, и я хочу загрузить только 3 при отображении моего списка и до того, как пользователь выберет один элемент для его отображения.
Для этого я создал следующий дао
@Dao
interface ReportDao {
@Query("SELECT id, name, description, created FROM reports ORDER BY created DESC")
fun loadShortReports(): LiveData<List<ReportItemDO>>
@Insert(onConflict = OnConflictStrategy.FAIL)
fun saveReports(reports: List<ReportDO>): Completable
}
это мой объект отчета:
@Entity(tableName = "reports")
data class ReportDO(
@PrimaryKey val id: UUID
, val name: String
, val description: String
.......)
и это миниатюрная сущность для списка
data class ReportItemDO(
override val id: UUID
, override val name: String
, override val description: String
, @ColumnInfo(name = "created") override val date: Date)
: ReportItemVO
(интерфейс ReportItemVO - это то, что ожидает список)
Когда приложение загружается, все загружается правильно
но чтобы проверить это, я создал простую кнопку, которая добавляет случайный элемент ReportDO
в базу данных, используя этот код:
repository.addReport(
report
).subscribeOn(schedulers.subscribeScheduler)
.observeOn(schedulers.observeScheduler)
.subscribe {
Log.i(MainViewModel.TAG, "success")
}
который в свою очередь вызывает
reportDao.saveReports(listof(report))
но список не обновляется автоматически
Когда я закрываю и перезапускаю приложение, список обновляется
Я предполагаю, что это потому, что я беру только подмножество сущности, поэтому Room не знает, что это должно вызвать обновление
Есть ли способ заставить Room понять, что созданные им LiveData были обновлены, и снова запустить процесс загрузки?
Кроме того, поскольку я хочу добавить кнопку обновления, есть ли способ отправить Room сообщение для ручной перезагрузки данных?