我一直使用SampleSyncAdapter作为基础来创建我自己的SyncAdapter。添加一个新帐户似乎效果很好,但是一旦我想用AccountManager.blockingGetAuthToken(...它卡住了,几分钟后抛出一个OperarationCanceledException。
有谁知道这里可能出了什么问题吗?除了我向自己的服务器进行身份验证之外,代码与示例几乎相同。
05-24 23:00:23.258: ERROR/SyncAdapter(4961):OperationCanceledExcetpion 05-24 23:00:23.258: ERROR/SyncAdapter(4961):android.accounts.OperationCanceledException 05-24 23:00:23.258: ERROR/SyncAdapter(4961):at android.accounts.AccountManager$AmsTask.internalGetResult(AccountManager.java:1255) 05-24 23:00:23.258: ERROR/SyncAdapter(4961):at android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1260) 05-24 23:00:23.258:错误/同步适配器(4961):在android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1181) 05-24 23:00:23.258:错误/同步适配器(4961):在android.accounts.AccountManager.blockingGetAuthToken(AccountManager.java:737)
发布于 2011-05-25 07:59:21
blockingGetAuthToken方法是一个同步调用getAuthToken的帮助器。
如果您正在访问网络以检索身份验证令牌,您将被阻止,直到请求成功。您应该检查是否可以从应用程序中正确地访问网络资源。
发布于 2014-09-20 13:02:17
最初,方法是一种获取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();https://stackoverflow.com/questions/6116987
复制相似问题