Android Paging Library - Data + Network с несколькими типами сортировки - PullRequest
0 голосов
/ 02 января 2019

Недавно я увидел, что в Google есть отличная библиотека для разбивки данных на страницы.

В этом Google IO:

Android Jetpack: управление бесконечными списками с помощью RecyclerView и Paging (Google I /O '18)

Они объяснили, как сделать Data + Network DataSource и получить данные из базы данных как Single Source of Truth, а когда база данных отсутствует, она запрашивает дополнительные данные из сети с BoundaryCallback.

Итак, предположим, что у меня есть список фильмов на сервере.И клиент (пользователь Android) может сортировать их по популярности, названию, дате_релизу и ...

Так что в первый раз, если пользователь сортирует фильмы по заголовкам, все будет работать отлично, потому что в базе данных и данных нет данныхс сервера будет запрошено отсортировать их по названию и отправить обратно.Но что, если после этого пользователь попытается отсортировать их по популярности, например?Из-за наличия фрагмента фильмов в базе данных (например, 50 фильмов) он сортирует это небольшое количество фильмов по популярности, а затем пытается получить данные с сервера, и это не очень хороший опыт.

Iне могу сделать таблицу для каждого типа сортировки, потому что это не очень хорошая практика.Так как я могу преодолеть эту проблему?

Большое спасибо

1 Ответ

0 голосов
/ 05 января 2019

Ваш вопрос имеет смысл. IMO: вам не нужно составлять таблицы для каждого типа сортировки, но вы можете отслеживать, с какой конечной точки получены данные. Например, у вас есть три конечные точки с запросом ?sort=default, ?sort=ratings, ?sort=released_date. Вы можете добавить три дополнительных логических атрибута (скажем, fromDefault, fromRatings, fromReleasedDate) к вашему классу модели БД, чтобы отслеживать, с какой конечной точки она пришла, и обновлять эти соответствующие флаги всякий раз, когда одни и те же данные фильма поступают с нескольких конечных точек.

Теперь, когда вы сортируете по рейтингу, вы будете использовать SQL-запрос для фильтрации тех, где флаг fromRatings равен true. Но изначально у вас их нет, поэтому ваш BoundaryCallback запускает запрос к серверу, получает отсортированные по рейтингу данные фильма, и перед сохранением вам придется переопределить fromRatings на true. Надеюсь, это поможет.

...