Мы пытаемся реализовать механизм кэширования комнаты как с кешем в памяти, так и с дисковым кешем, который содержит только один объект, который имеет уникальный ключ для каждого сетевого вызова, а результат сохраняется в json. Вот DAO и Entity,
@Dao
interface CacheDao {
@Query("SELECT * FROM cache WHERE key = :key LIMIT 1")
fun getOneByKey(key: String): LiveData<Cache>
}
@Entity(tableName = "cache")
data class Cache (
@ColumnInfo(name = "cache_key")
val key: String,
@ColumnInfo(name = "response")
val response: String,
)
В зависимости от того, откуда мы получаем данные, мы анализируем json на соответствующую модель.
Однако при попытке использовать шаблон репозитория и MVVM, у нас есть модель просмотра, получающая данные из репозитория, в репозитории есть функция, которая выполняет сетевой вызов и кэширует данные или hust возвращает данные из кеша. Livedata используется, и Viewmodel наблюдает за живыми данными. Дело в том, что DAO возвращает LiveData, а репозиторий должен возвращать, скажем: LiveData. Как я могу реализовать это преобразование в репозитории? Должен ли я иметь отдельный наблюдатель в репозитории, который наблюдает за DAO, и как только происходит изменение, репозиторий преобразует данные LiveData из базы данных в LiveData? если да, то как создать нового наблюдателя в репозитории? В частности, какой контекст использовать? И будет ли модель просмотра по-прежнему отслеживать изменения в репозитории? Я новичок в Room, поэтому могу упустить что-то очевидное. Я искал решение в inte rnet, но не нашел ничего похожего на этот конкретный сценарий. Буду рад, если вы дадите какие-либо предложения, как мне поступить.
Заранее спасибо.