Android Livedata Room. Какой метод использовать - PullRequest
0 голосов
/ 12 апреля 2020

В моем Android Kotlin приложении. Профиль пользователя (форма) должен быть обновлен с использованием данных из RestAPI, например. Данные об образовании и местоположении из API выглядят следующим образом

{"educations": [{"edu_uid": 123, "edu_sector": "xxxx", "edu_degree": "xxx"}, .....}
{"locations": [{"loc_uid": 123, "loc_place": "xxxx", "loc_zip": "xxx"}, .....}

После использования этих данных. Мы показываем это в адаптере. Пользователь выбирает свой выбор. Мы обновляем XML представлений, таких как @ id / textViewEduSector и @ id / textViewEduDegree. После заполнения формы, когда Пользователь отправляет данные, я отправляю на сервер только «edu_uid» «loc_uid». Вот представление моей реализации:

profile_fragment -> education_fragment -> education_adapter onEducationClick -> 
navigateUp() -> profile_fragment update @id/textViewEduSector and @id/textViewEduDegree.

Тогда местоположение и так. В конце, когда пользователь отправляет форму, как я могу выбрать «edu_uid» и «loc_uid» для отправки данных в конечный элемент API, например. "/ Профиль / обновление". Как я могу временно собрать эти жидкости? У меня есть база данных номеров со всеми полями пользователя. Здесь я не хочу сохранять скрытые поля, "edu_uid" или "loc_uid". Необходимо ли обновлять Room через Dao, а затем собирать данные оттуда и отправлять в API или любой другой обходной путь? Быстро и эффективно?

1 Ответ

0 голосов
/ 12 апреля 2020

Поскольку трудно понять суть вашей проблемы, я постараюсь высказать общие соображения по поводу вашего варианта использования.

Попробуйте выделить следующие вопросы:

  1. Что такое единственный источник правды в вашем приложении? Это локальная база данных? Если нет - почему?

  2. Как представить свои источники данных в пользовательском интерфейсе?

  3. Как синхронизировать структуры данных с сервером?

Структуры данных . Попробуйте использовать базу данных (ROOM) в качестве единственного источника истины в вашем приложении. Если вы это сделаете, вы получите дополнительные преимущества работы без доступа к Rest API. В этом случае ваш набор ROOM-сущностей должен включать в себя - Education (edu_uid в качестве первичного ключа), Location (loc_uid в качестве первичного ключа) и User / UserProfile (с edu_uid и loc_uid в качестве внешних ключей). В этом случае вам не следует добавлять поля «edu_sector» или «edu_degree» в класс данных UserProfile. А с помощью действия «отправить» вы должны сохранить изменения в своей локальной базе данных (с помощью edu_id и loc_uid) и решить свой «вопрос REST API» на следующем шаге.

Представление в пользовательском интерфейсе . Если вы используете MVVM, у вас не должно быть проблем с "edu_id" или "loc_id". Вы объявляете ссылки на Education и Location в вашей ViewModel, и в своем XML вы можете легко использовать любые поля этих объектов.

Syn c с сервером . Это должно быть легко, если у вас есть эффективная локальная база данных со всеми необходимыми полями в качестве внешних ключей (опять же в вашем DAO вы можете получить все остальные поля, которые вы хотите, из других таблиц с объединениями таблиц)

Опять же, может быть, я не не понимаю твою настоящую проблему. Это действительно неясно

...