Как включить или отключить функции в моем приложении в зависимости от извлеченных данных - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю над профилем для приложения, которое требует, чтобы некоторые данные были извлечены из базы данных Firebase и затем отображены в профиле пользователя.

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

Но теперь у меня есть еще одно требование, заключающееся в том, что некоторые из моих функций находятся в месте, которое я пытаюсь выяснить, как это сделать лучше.

Я загружаю все данные профиля этим методом (так как это большой метод, я собираюсь уменьшить его, но вопрос не в коде, а в логике).

        private void loadProfileData() {
            if (mActivity == null) {
                return;
            }

            mProgressBar.setVisibility(View.VISIBLE);
            mDatabase.child("users").child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    if (dataSnapshot.exists()) {

                        UserModel model = dataSnapshot.getValue(UserModel.class);

    String username = model.getUsername();
  .
  .
  .
     //All data loaded 

    mProgressBar.setVisibility(View.GONE);

...

Итакпока эти данные выбираются, у меня есть меню переполнения, в котором есть возможность редактировать профиль пользователя.

enter image description here

Теперь эта опция редактирования профилявключен, пока мои данные извлекаются как beign, и мне нужно передать дополнительные данные в эту активность со всей пользовательской информацией, полученной из Firebase, чтобы загрузить ее и отредактировать.

Теперь я подумал об этомдва пути

  1. Дождитесь завершения всего асинхронного процесса, а затем включите опцию редактирования профиля в навигационном меню
  2. Оставьте кнопку меню включенной, пока данные извлекаются, и извлекайте ее снова, когда яЯ нахожусь внутри этой деятельности (это будет перезагружать все данные вместо того, чтобы передавать их как дополнительные, что будет более эффективным), но в то же время я делаю два запроса на одни и те же данные

Есть ли лучший способ реализовать эту функцию?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Хороший вопрос Gastón.Итак, чтобы ответить на ваши вопросы:

Дождитесь завершения всего процесса асинхронизации, а затем включите опцию редактирования профиля в меню навигации

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

Оставьте кнопку меню включенной, пока данные извлекаются, и извлекайте ее снова, когда я нахожусь в этой активности (чтобудет перезагружать все данные вместо того, чтобы передавать их как дополнительные, что будет более эффективным), но в то же время я делаю два запроса на одни и те же данные

Нет необходимости получать данныедважды.Это будет пустой тратой пропускной способности и ресурсов.Не рекомендуется снова и снова получать данные, поскольку их можно использовать повторно.

0 голосов
/ 27 ноября 2018

Можно ли загрузить все пользовательские данные в фоновом режиме, возможно, при запуске приложения?Затем вы можете отобразить кнопку редактирования и предположить, что текущий кэш данных правильный.

Вы по-прежнему можете извлекать последнюю копию данных, а затем соответствующим образом обновлять пользовательский интерфейс , если - это не так.Однако я полагаю, что данные не будут часто меняться, поэтому загрузка их несколькими минутами раньше, вероятно, безопасна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...