AccountManager 阻止GetAuthToken 被卡住

发布于 2024-11-09 05:04:12 字数 967 浏览 4 评论 0原文

我一直在使用 SampleSyncAdapter 作为创建我自己的 SyncAdapter 的基础。添加新帐户似乎效果很好,但是一旦我想使用 AccountManager.blockingGetAuthToken(... 获取 authtoken,它就会卡住,然后在几分钟后抛出 OperarationCanceledException。

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

:ERROR/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)

I've been using the SampleSyncAdapter
as a base to create my own SyncAdapter. It seems to work well to add a new account, but once I want to get the authtoken with AccountManager.blockingGetAuthToken(... it gets stuck and then throws an OperarationCanceledException after a few minutes.

Does anyone have an Idea of what could be wrong here? The code is almost the same as the sample except I am authenticating towards my own server.

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: ERROR/SyncAdapter(4961): at android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1181)
05-24 23:00:23.258: ERROR/SyncAdapter(4961): at android.accounts.AccountManager.blockingGetAuthToken(AccountManager.java:737)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云仙小弟 2024-11-16 05:04:12

blockingGetAuthToken 方法是同步调用 getAuthToken 的帮助程序。

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

The blockingGetAuthToken method is a helper that calls getAuthToken synchronously.

If you are accessing the network to retrieve the auth token you will be blocked until the request succeeds. You should check that you can access the network resource properly from within your application.

末蓝 2024-11-16 05:04:12

原本方法是一种获取 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();

originally method is a convenient way to get authtoken instead calling method getAuthToken.
have to make sure not in the mainthread by calling methed runOnUIthread. or you can call the default method getAuthToken and using callback for execute next instruction. for the example.

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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文