Аутентификатор учетной записи Android редактировать учетные данные электронной почты

Когда я вхожу с test1@gmail.com в моем приложении. Это успешно создает учетную запись с моей электронной почтой, как это

введите описание изображения здесь

Теперь я выхожу из системы и захожу с другим адресом электронной почты, например test2@gmail.com, затем он создает аккаунт

введите описание изображения здесь

Я хочу знать, что является лучшим способом

1) Удалить первый аккаунт и добавить второй аккаунт

2) Обновите первый аккаунт вторым, если это возможно.


Какую проблему я получаю на самом деле?

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

Можно ли обновить аккаунт с помощью updateCredentials если да то как??

Отредактировано:

Что я делаю на самом деле?

  • Создание пакета с необходимыми данными для аккаунта

  • Проверяя, существует ли учетная запись с локальными вставленными параметрами пакета "global_user_id", если она уже существует, я должен обновить EMAIL, который используется в качестве имени входа (см. Изображения выше).

  • В настоящее время я делаю как: удаление старой учетной записи и добавление новой учетной записи, но следующая строка предназначена для конфигурации SyncAdapter, которой требуется учетная запись. При этом получается NULL, потому что добавление аккаунта занимает некоторое время в фоновом режиме.

Есть ли другое решение для обновления этого идентификатора электронной почты?

3 ответа

Решение

Я получил решение этой проблемы.

Вопрос: удаление / добавление аккаунта остается нулевым accountобъект

Решение 1:

Сначала я удалил аккаунт используя removeAccount() а потом попытался addAccountExplicitlyНОremoveAccount() требуется время для выполнения в фоновом потоке, покавызывается addAccountExplyly, и выполняется дальнейший процесс.

Так что я изменил свой поток, как я использовалremoveAccount метод класса AccountManager и выполнение всего процесса в этом обработчике, поэтому я пишу свой код в области обратного вызова.

 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
     mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() {
         @Override
         public void run(AccountManagerFuture<Bundle> future) {

             // Creating the account on the device and setting the auth token we got
             // (Not setting the auth token will cause another call to the server to authenticate the user)
             mAccountManager.addAccountExplicitly(account, accountPassword, intent.getBundleExtra(AccountManager.KEY_USERDATA));
             mAccountManager.setAuthToken(account, authTokenType, authToken);

             /**
              * Setting for Sync Adapter
              * Syncing Configuration
              */
              SyncAdapter.configSyncAdapter(mContext);
        }
    }, null);

} else {

    mAccountManager.removeAccount(accounts[0], new AccountManagerCallback<Boolean>() {
        @Override
        public void run(AccountManagerFuture<Boolean> future) {

            // Creating the account on the device and setting the auth token we got
            // (Not setting the auth token will cause another call to the server to authenticate the user)
            mAccountManager.addAccountExplicitly(account, accountPassword, intent.getBundleExtra(AccountManager.KEY_USERDATA));
            mAccountManager.setAuthToken(account, authTokenType, authToken);

            /**
             * Setting for Sync Adapter
             * Syncing Configuration
             */
             SyncAdapter.configSyncAdapter(mContext);
        }
    }, null);
}

Решение 2:

Я нашел метод с именем renameAccount(), но он требует минимальной версии SDK 21. Согласно документации:

Переименуйте указанную учетную запись. Это эквивалентно удалению существующей учетной записи и добавлению новой переименованной учетной записи с пользовательскими данными старой учетной записи.

Безопасно вызывать этот метод из основного потока.

Спасибо.

проблема

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

Решение

Шаг 1. Вы должны использовать addOnAccountsUpdatedListener для получения обратного вызова в ваш основной поток.

Шаг 2. Вы получите обратный вызов на onAccountsUpdated OnAccountsUpdateListener

Шаг 3. Получив обратный вызов, вы можете поместить свой следующий код в этот метод. то есть: конфигурация SyncAdapter

Шаг 4. Не забудьте избавиться от прослушивателя, который вы зарегистрировали, иначе вы будете страдать от утечки памяти. Так что используйте removeOnAccountsUpdatedListener, как только вы закончите.

Я надеюсь, что это будет полезно!

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

AccountManager accountManager = AccountManager.get(this); //this is Activity
Account account = new Account("MyAccount","com.company.demo.account.DEMOACCOUNT");
boolean success = accountManager.addAccountExplicitly(account,"password",null);
if(success){
    Log.d(TAG,"Account created");
}else{
    Log.d(TAG,"Account creation failed. Look at previous logs to investigate");
}

Просто проверьте логический успех. И делай свою работу соответственно:)

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