当我在应用程序中使用 test1@gmail.com 登录时,它将使用我的电子邮件成功生成帐户,如下所示
Android帐户身份验证器编辑电子邮件ID凭据-LMLPHP
现在我注销并使用不同的电子邮件登录,例如 test2@gmail.com ,然后它生成这样的帐户
Android帐户身份验证器编辑电子邮件ID凭据-LMLPHP
我想知道那是最好的方法
1)删除第一个帐户,然后添加第二个帐户
2)如果可以更新第一个帐户,请用第二个更新。

我实际遇到的问题是什么?
如果我删除并再次使用addAccountExplicitly添加帐户,则需要花费一些时间来创建新帐户,因此我的下一个代码将被执行,并且帐户返回空。
如果可以,可以使用updateCredentials更新帐户吗?
编辑:
我实际上在做什么?

  • 为帐户创建包含必需数据的 bundle
  • 检查帐户帐户是否已经存在,并且带有本地插入的 bundle 软件参数“global_user_id”,如果已经存在,则我必须更新用作登录名的EMAIL (请参见上图)。
  • 当前,我正在这样做,删除旧帐户并添加新帐户,但下一行用于 SyncAdapter配置,它需要帐户。在这种情况下,获取为NULL 为NULL,因为在后台添加帐户需要一些时间。

  • 还有其他解决方案来更新电子邮件ID 吗?

    最佳答案

    我已经解决了这个问题。

    问题:删除/添加帐户仍然为空account对象

    解决方案1:

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

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

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



    谢谢你。

    10-05 23:03
    查看更多