Android Room - как получить только новые данные?
Что является результатом этого Dao
метод после вставки некоторых message
s в базе данных:
@Query("SELECT * FROM messages")
Flowable<List<Message>> getMessages();
1 - ВСЕ message
сохраненные в базе данных будут выбрасываться после этого изменения
или же
2 - Только РАЗНИЦА между новым и старым message
s будет выпущен после изменения?
В каких документах это указано? Если сначала, что я должен сделать, чтобы получить разницу - что-то вроде DiffUtils
или есть другие подходы?
PS Что если я УДАЛЮ некоторые сообщения?
1 ответ
- Все сообщения, хранящиеся в базе данных, будут отправлены.
- Чтобы получить разницу, рекомендуется использовать DiffUtils, как вы упомянули. Существует много информации о том, как это работает и как это реализовать. Просто упомянуть несколько здесь у вас есть этот учебник Mindorks и @iammert учебник
- Вы можете написать другой запрос, если не хотите получать все сообщения каждый раз, когда некоторые из них меняются. Это зависит от вашего варианта использования, но, например, у вас может быть запрос, который возвращает все сообщения после определенной даты, если вы знаете, что старые сообщения не изменятся.
- Если вы удалите несколько сообщений, результат запроса изменится. Таким образом, вы получите все сообщения снова.
- я хотел бы использовать
LiveData<List<Message>>
вместо. Поведение такое же, и вам не нужно беспокоиться об удалении подписок или об изменениях конфигурации. Тем не менее, я бы использовалSingle
или жеMaybe
когда вы должны вернуть один результат.
Обновление: вместо того, чтобы получать все сообщения и видеть разницу между ними с помощью DiffUtils, вы можете извлечь подмножество сообщений и обновить их по требованию. Новая библиотека подкачки в Android поможет вам в этом. Опять же, есть много информации о том, как это сделать, поэтому я не собираюсь помещать детали реализации здесь, потому что это выходит за рамки вопроса, но здесь у вас есть один из многих доступных учебников.