manager example authenticator android sync accountmanager auth-token

android - example - El bloqueo de AccountManagerGetAuthToken se atasca



authenticator android example (2)

El método blockingGetAuthToken es un helper que llama a getAuthToken sincrónicamente.

Si está accediendo a la red para recuperar el token de autenticación, será bloqueado hasta que la solicitud tenga éxito. Debe verificar que pueda acceder al recurso de red de forma adecuada desde su aplicación.

He estado usando SampleSyncAdapter como base para crear mi propio SyncAdapter. Parece que funciona bien agregar una nueva cuenta, pero una vez que quiero obtener el authtoken con AccountManager.blockingGetAuthToken (... se atasca y luego arroja una OperarationCanceledException después de unos minutos).

¿Alguien tiene una Idea de lo que podría estar mal aquí? El código es casi el mismo que el de la muestra, excepto que me estoy autenticando para mi propio servidor.

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


Originalmente, el método es una forma conveniente de obtener authtoken en lugar de llamar al método getAuthToken . debe asegurarse de que no esté en el hilo principal llamando a methed runOnUIthread. o puede llamar al método predeterminado getAuthToken y usar la devolución de llamada para ejecutar la próxima instrucción. por el ejemplo.

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();