Возникли проблемы с применением архитектуры кода Android / шаблонов проектирования

Я хочу добиться следующего:

Я получаю уведомление через FCM с определенным id в свойствах данных. Я получаю id и когда мое приложение находится на переднем плане и на заднем плане / закрыто... пока все хорошо.
Теперь я хочу сделать следующее:

  1. Сделать запрос на залп, например, /books/id чтобы получить соответствующую книгу информации.
  2. Сохраняйте эту информацию постоянно в Room database
  3. Показать их в 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

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