Android 帐户验证器编辑电子邮件 ID 凭据
Android Account Authenticator edit Email Id Credentials
当我在 application.It 中使用 test1@gmail.com 登录时,使用我的电子邮件成功生成帐户
现在我注销并使用不同的电子邮件登录,例如 test2@gmail.com 然后它会生成这样的帐户
我想知道哪种方法最好
1) 删除第一个帐户并添加第二个帐户
2) 如果可以的话,用第二个帐户更新第一个帐户。
我实际遇到的问题是什么?
如果我使用 addAccountExplicitly
删除并再次添加帐户,创建新帐户需要一些时间,因此我的下一个代码将被执行并且 account returns null.
是否可以使用 updateCredentials
的帮助更新帐户,如果是,那么如何??
已编辑:
我实际上是做什么的?
正在创建包含帐户所需数据的捆绑包
检查 account 是否已经存在,本地插入的包参数“global_user_id”,如果它已经存在,那么我必须更新 EMAIL 用作登录名(见上图。)
目前我正在做,删除旧帐户并添加新帐户,但下一行是 SyncAdapter Configuration 需要帐户。因为在后台添加帐户需要一些时间,所以得到 NULL。
是否有任何其他解决方案来更新 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.
谢谢。
当我在 application.It 中使用 test1@gmail.com 登录时,使用我的电子邮件成功生成帐户
现在我注销并使用不同的电子邮件登录,例如 test2@gmail.com 然后它会生成这样的帐户
我想知道哪种方法最好
1) 删除第一个帐户并添加第二个帐户
2) 如果可以的话,用第二个帐户更新第一个帐户。
我实际遇到的问题是什么?
如果我使用 addAccountExplicitly
删除并再次添加帐户,创建新帐户需要一些时间,因此我的下一个代码将被执行并且 account returns null.
是否可以使用 updateCredentials
的帮助更新帐户,如果是,那么如何??
已编辑:
我实际上是做什么的?
正在创建包含帐户所需数据的捆绑包
检查 account 是否已经存在,本地插入的包参数“global_user_id”,如果它已经存在,那么我必须更新 EMAIL 用作登录名(见上图。)
目前我正在做,删除旧帐户并添加新帐户,但下一行是 SyncAdapter Configuration 需要帐户。因为在后台添加帐户需要一些时间,所以得到 NULL。
是否有任何其他解决方案来更新 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.
谢谢。