Библиотека пейджинга и комната с разными списками страниц, которые зависят от разных запросов

Я пытаюсь настроить все свои списки, используя новые компоненты архитектуры Android: Room Persistance Library и библиотека подкачки. Но я столкнулся со следующей проблемой. Представьте себе приложение, в котором есть множество разных списков одной и той же модели. Каждый список имеет свой собственный URL-адрес запроса к серверу. Некоторые элементы могут повторяться в разных ответах. Поэтому я думаю, что мне нужно вставлять и обновлять все элементы каждого ответа в таблицу этой модели. Кроме того, у каждого запроса есть страницы. Например, elements/famous/0, elements/famous/1. Итак, когда получен ответ страницы 1, список, содержащий элементы списка 0, должен добавить элементы, возвращенные страницей 1.

Запрос комнаты, который возвращает LivePagedListProvided, выглядит следующим образом:

@Query("SELECT * FROM elements")
fun getElements(): LivePagedListProvider<Int, Model>

Когда какой-либо элемент запроса изменяется или элемент, добавленный в базу данных, влияет на запрос, наблюдаемые LivePagedListProvider обеспечивают изменение, поэтому пользовательский интерфейс изменяется автоматически.

Вопрос в том, как мне сохранять и извлекать элементы, которые могут содержаться в разных списках, в зависимости от разных запросов с использованием библиотеки подкачки?


person Damia Fuentes    schedule 09.11.2017    source источник
comment
Да, я хочу использовать место для сохранения там всех элементов   -  person Damia Fuentes    schedule 09.11.2017


Ответы (1)


Если вы используете только одну таблицу для локального хранения ваших полученных данных (от разных запросов к серверу), то после каждого обновления этой таблицы все ваши DataSource будут инвалидироваться, поэтому мы видим автообновление. Для разных запросов вы можете использовать разные таблицы, но это нехорошо) Я думаю, вы можете написать select query с некоторыми условиями, которые представляют собой разницу между вашими запросами к серверу, если модель результата одинакова в этих запросах.

person Alex    schedule 16.11.2017
comment
Модель результата та же. Но тогда я должен добавить другой столбец для каждого запроса, что тоже нехорошо. Представьте, что у вас есть такие запросы, как: новейшие товары, популярные товары, потрясающие товары... - person Damia Fuentes; 16.11.2017
comment
@DamiaFuentes, поэтому вы можете использовать некоторую сортировку для каждого запроса (по дате, по популярности, по крутости), но только если API возвращает эти параметры. Если у вас нет этих параметров, вы можете создать три дополнительные таблицы (самые новые, популярные, удивительные), где вы можете хранить идентификаторы для каждого элемента, а затем использовать эти идентификаторы в запросах к БД. - person Alex; 17.11.2017
comment
Наличие трех таблиц не оптимально, поскольку может увеличиться количество запросов типов. Я сделаю таблицу с запросами и их ответами с сохраненными элементами идентификаторов в базе данных. - person Damia Fuentes; 20.11.2017
comment
@DamiaFuentes, ребята из Google, сделали это в образце Room. github.com/googlesamples/android-architecture-components/blob/ - person Alex; 20.11.2017
comment
@DamiaFuentes Вы нашли решение своей проблемы? Я в поиске такого же. - person santosh; 30.10.2019