【问题标题】:AccountManager blockingGetAuthToken gets stuckAccountManager 阻止GetAuthToken 卡住
【发布时间】:2011-09-01 07:10:42
【问题描述】:

我一直在使用SampleSyncAdapter 作为创建我自己的 SyncAdapter 的基础。添加一个新帐户似乎效果很好,但是一旦我想使用 AccountManager.blockingGetAuthToken(...

有没有人知道这里可能出了什么问题?代码与示例几乎相同,只是我正在对自己的服务器进行身份验证。

05-24 23:00:23.258: 错误/SyncAdapter(4961): OperationCanceledExcetpion 05-24 23:00:23.258: 错误/SyncAdapter(4961): android.accounts.OperationCanceledException 05-24 23:00:23.258: 错误/SyncAdapter(4961): 在 android.accounts.AccountManager$AmsTask.internalGetResult(AccountManager.java:1255) 05-24 23:00:23.258: 错误/SyncAdapter(4961): 在 android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1260) 05-24 23:00:23.258: 错误/SyncAdapter(4961): 在 android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1181) 05-24 23:00:23.258: 错误/SyncAdapter(4961): 在 android.accounts.AccountManager.blockingGetAuthToken(AccountManager.java:737)

【问题讨论】:

    标签: android sync accountmanager auth-token


    【解决方案1】:

    blockingGetAuthToken 方法是一个同步调用getAuthToken 的助手。

    如果您正在访问网络以检索身份验证令牌,您将被阻止,直到请求成功。您应该检查您是否可以从应用程序中正确访问网络资源。

    【讨论】:

    • 谢谢。您的回答确实使我朝着正确的方向前进。直到现在我才真正了解身份验证的流程。我的问题是我的验证器在确认密码时卡住了,不是因为网络连接问题,而是在上下文为空时尝试获取首选项。
    【解决方案2】:

    原本方法是获取authtoken的便捷方式,而不是调用方法getAuthToken。 必须通过调用方法 runOnUIthread 确保不在主线程中。或者您可以调用默认方法 getAuthToken 并使用回调来执行下一条指令。例如。

    final AccountManagerFuture<Bundle> future = mAccountManager.getAuthToken(account, AccountConfig.AUTHTOKEN_TYPE, null, this, null, null);
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
    
                    Bundle bnd = future.getResult();
                    final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); 
                    if (authtoken == null) { 
                        return;
                    }
                     // this callback interface method 
                    logoutCallback.onLogoutFinished(authtoken);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 2021-04-16
      相关资源
      最近更新 更多