Android Кэширование комнаты с одним объектом и значениями JSON - PullRequest
0 голосов
/ 28 мая 2020

Мы пытаемся реализовать механизм кэширования комнаты как с кешем в памяти, так и с дисковым кешем, который содержит только один объект, который имеет уникальный ключ для каждого сетевого вызова, а результат сохраняется в 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, но не нашел ничего похожего на этот конкретный сценарий. Буду рад, если вы дадите какие-либо предложения, как мне поступить.

Заранее спасибо.

...