AccountManagerblockingGetAuthToken卡住了

| 我一直在使用SampleSyncAdapter 作为创建我自己的SyncAdapter的基础。添加一个新帐户似乎很好用,但是一旦我想使用AccountManager.blockingGetAuthToken(...)获取身份验证,它就会卡住,然后在几分钟后引发OperarationCanceledException。 有谁知道这里可能出什么问题?该代码与示例几乎相同,除了我正在对自己的服务器进行身份验证。 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)     
已邀请:
blockingGetAuthToken
方法是一个同步调用calls1 help的助手。 如果您正在访问网络以检索auth令牌,则将阻止该请求,直到请求成功。您应该检查以确保可以从应用程序内正确访问网络资源。     
本来的方法是获取身份验证令牌的便捷方法,而不是调用方法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();
    

要回复问题请先登录注册