2

私は 独自の SyncAdapter を作成するためのベースとしてSampleSyncAdapterを使用しています。新しいアカウントを追加するとうまくいくようですが、 AccountManager.blockingGetAuthToken(... で authtoken を取得したい場合、スタックし、数分後に OperationCanceledException がスローされます。

ここで何が間違っているのか、誰かが考えを持っていますか? コードは、自分のサーバーに対して認証していることを除いて、サンプルとほぼ同じです。

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) で

4

2 に答える 2

2

このメソッドは、同期的blockingGetAuthTokenに呼び出すヘルパーです。getAuthToken

ネットワークにアクセスして認証トークンを取得している場合は、リクエストが成功するまでブロックされます。アプリケーション内からネットワークリソースに正しくアクセスできることを確認する必要があります。

于 2011-05-24T23:59:21.127 に答える
0

もともとメソッドは、メソッドgetAuthTokenを呼び出す代わりに authtoken を取得する便利な方法です。メソッド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();
于 2014-09-20T05:02:16.937 に答える