Как передать объекты данных из комнаты DB в класс WorkManager - PullRequest
0 голосов
/ 12 января 2019

Есть диалог, который сохраняет объект в базу данных Room. Диалог должен дождаться сохранения в базе данных, чтобы запустить специальный класс Worker, который извлечет этот объект из базы данных по идентификатору и выполнит некоторую работу с ним.

Но для этого требуется синхронный код, который является антишаблоном в Room. Я решил, что лучшим вариантом будет запустить WorkManager, который сохранит объект в базе данных, а затем запустить специальный класс Worker по цепочке. Но проблема в том, что я не могу передать объект для сохранения в Data.Builder, только примитивные типы. Остается только вариант сериализации в JSON. Можно ли обойтись без сериализации? В конце концов, размер сериализованного JSON теоретически может превышать предел 10240 bytes.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 26 мая 2019

Вам нужно будет передать их по ссылке. Поэтому, если у вас есть Room Entity, захватите ее ключ / идентификатор и передайте ее в качестве ввода в Worker, используя setInputData в {OneTime|Periodic}WorkRequest.Builder, и вы можете запросить фактическую комнату Entity в реализации Worker.

...