Android 帐户验证器编辑电子邮件 ID 凭据

Android Account Authenticator edit Email Id Credentials

当我在 application.It 中使用 test1@gmail.com 登录时,使用我的电子邮件成功生成帐户

现在我注销并使用不同的电子邮件登录,例如 test2@gmail.com 然后它会生成这样的帐户

我想知道哪种方法最好

1) 删除第一个帐户并添加第二个帐户

2) 如果可以的话,用第二个帐户更新第一个帐户。


我实际遇到的问题是什么?

如果我使用 addAccountExplicitly 删除并再次添加帐户,创建新帐户需要一些时间,因此我的下一个代码将被执行并且 account returns null.

是否可以使用 updateCredentials 的帮助更新帐户,如果是,那么如何??

已编辑:

我实际上是做什么的?

是否有任何其他解决方案来更新 Email Id

我认为您应该删除第一个帐户,然后再添加新帐户。至于您在执行帐户之前执行的代码问题,您可以通过

来控制
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");
}

只需检查成功布尔值。并相应地做你的工作:)

问题

当您 create/remove 帐户时,它会在不同的线程(后台线程)中执行该任务,因此它会转到可能有空值的下一行。

解决方案

第一步。 您应该使用 addOnAccountsUpdatedListener 来接收主线程的回调。

第 2 步。 您将在 onAccountsUpdated of OnAccountsUpdateListener

收到回电

第 3 步。 收到回调后,您可以将下一个代码放在该方法中。即:SyncAdapter 配置

第 4 步。 不要忘记删除您注册的监听器,否则您将遭受内存泄漏。因此,完成后使用 removeOnAccountsUpdatedListener

希望对您有所帮助!

我找到了这个问题的解决方案。

问题:Removing/Adding Account remains null account object

解决方案 1:

首先,我使用 removeAccount() 删除了帐户,然后尝试 addAccountExplicitly 但是 removeAccount() 需要时间在 后台线程 中执行,而 addAccountExplicitly 已调用并进行进一步处理。

所以我改变了我的流程,因为我使用了 removeAccount AccountManager class 的方法并做了整个在该处理程序中处理,所以我在回调区域中编写代码。

 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。 根据文档:

Rename the specified Account. This is equivalent to removing the existing account and adding a new renamed account with the old account's user data.

It is safe to call this method from the main thread.

谢谢。