Android Room - как получить только новые данные? - PullRequest
1 голос
/ 28 апреля 2019

Что является результатом этого метода Dao после добавления некоторых message s в базу данных:

@Query("SELECT * FROM messages")
Flowable<List<Message>> getMessages();

1 - ALL message s, сохраненные в базе данных, будут отправлены после этого изменения

или

2 - Только изменения РАЗНИЦА между новым и старым message будут выбрасываться после изменения?

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

P.S. Что если я УДАЛЮ несколько сообщений?

1 Ответ

0 голосов
/ 28 апреля 2019
  1. Все сообщения, хранящиеся в базе данных, будут отправлены.
  2. Чтобы получить разницу, рекомендуется использовать DiffUtils , как вы упомянули. Существует много информации о том, как это работает и как это реализовать. Просто чтобы упомянуть несколько здесь у вас есть учебник Mindorks и @ iammert учебник
  3. Вы можете написать другой запрос, если не хотите получать все сообщения каждый раз, когда некоторые из них меняются. Это зависит от вашего варианта использования, но, например, у вас может быть запрос, который возвращает все сообщения после определенной даты, если вы знаете, что старые сообщения не изменятся.
  4. Если вы удалите несколько сообщений, результат запроса изменится. Таким образом, вы получите все сообщения снова.
  5. Я бы использовал LiveData<List<Message>> вместо этого. Поведение такое же, и вам не нужно беспокоиться об удалении подписок или об изменениях конфигурации. Тем не менее, я бы использовал Single или Maybe, когда вам нужно вернуть один результат.

Обновление: вместо того, чтобы получать все сообщения и видеть разницу между ними с помощью DiffUtils, вы можете получить подмножество сообщений и обновить их по требованию. Новая библиотека подкачки в Android поможет вам в этом. Опять же, есть много информации о том, как это сделать, поэтому я не собираюсь помещать детали реализации здесь, потому что это выходит за рамки вопроса, но здесь у вас есть один из многих учебников доступно.

...