Возникли проблемы с применением архитектуры кода Android / шаблонов проектирования
Я хочу добиться следующего:
Я получаю уведомление через FCM с определенным id
в свойствах данных. Я получаю id
и когда мое приложение находится на переднем плане и на заднем плане / закрыто... пока все хорошо.
Теперь я хочу сделать следующее:
- Сделать запрос на залп, например,
/books/id
чтобы получить соответствующую книгу информации. - Сохраняйте эту информацию постоянно в
Room database
- Показать их в
RecyclerView
Сценарий 1. Приложение с RecyclerView находится на переднем плане:
Как только я получу новый id
через данные уведомления FCM, я хочу RecyclerView
добавить другой элемент списка с недавно полученной информацией о книге.
Сценарий 2: приложение находится в фоновом режиме - уведомление нажимается:
Когда уведомление нажимается, MainActivity
с RecyclerView
загружается, показывая информацию о недавно полученных книгах.
Сценарий 3: приложение находится в фоновом режиме - уведомление удаляется
Через некоторое время уведомление было удалено, пользователь снова открывает или перезапускает приложение. MainActivity
с RecyclerView
и недавно извлеченная информация о книге показана.
Моя проблема:
Я не совсем знаю, как структурировать мой код для достижения этой цели. Я попытался сделать запрос залпа внутри FCM onMessageReceived()
но это привело к ошибке, и я не знаю, где и как я мог бы сделать это иначе. Я проверил запрос залпа в другом проекте, и он работал там. В настоящее время я пытаюсь научиться работать с базой данных Room.
Я был бы очень признателен, если бы кто-нибудь дал мне представление о том, как этого добиться. Мне действительно нужно, чтобы это сработало в ближайшее время.
Заранее спасибо! :)
РЕДАКТИРОВАТЬ 1: я не получаю ошибку внутри onMessageReceived
больше. Я получаю правильный ответ с данной книгой id
,
Теперь я хочу сохранить эту информацию в Room database
и отражают изменения в моем RecyclerView
, Я думаю, что я собираюсь использовать Android architecture components
как здесь:
пример компонентов архитектуры Android
Я думаю, что это именно то, что мне нужно. Тем не менее, я до сих пор не совсем понимаю, как с этим справляться и соответствующим образом структурировать свой код.
1 ответ
Сценарий 1: Вы можете сохранить его в БД или просто сделать трансляцию и сохранить его, например, в Activity, а затем отобразить список.
Сценарий 2: Вы должны хранить все отображаемые данные в БД. После нажатия на уведомление, когда RecyclerView
в фоновом режиме, вы должны обрабатывать намерение, которое проходит через android.intent.category.LAUNCHER
намерения-фильтра и поместите некоторую информацию там, чтобы сделать запрос и обновить список.
Сценарий 3: Наконец, просто сделайте запрос, сохраните в БД, затем отобразите все в списке. Это хороший подход, он требует дополнительного времени, но вы всегда держите его в курсе.
Также читайте об эффективных данных горячей замены с DiffUtils