Комната не обновляет liveata списка из подмножества - PullRequest
1 голос
/ 07 мая 2019

У меня есть база данных, в которой есть таблица с несколькими столбцами, и я хочу загрузить только 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 сообщение для ручной перезагрузки данных?

...