Android Room - как получить только новые данные?

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

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

1 - ВСЕ messageсохраненные в базе данных будут выбрасываться после этого изменения

или же

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

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

PS Что если я УДАЛЮ некоторые сообщения?

1 ответ

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

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

Другие вопросы по тегам