2013-05-23 4 views
1

Je l'ai mis en place un AccountManager personnalisé le long des lignes de Github Gauges ou Github Android ClientAccountManagerFuture ne pas jeter OperationCanceled lorsque vous appuyez sur Retour

Plus précisément, je suis mise en œuvre:

  • AccountAuthenticatorService (comme here)
  • AccountAuthenticator (comme here)
  • ApiKeyProvider qui appelle accountManagerFuture.getResult()

Lorsque accountManagerFuture.getResult() est appelé, mon LoginActivity est démarré comme il se doit. Cependant, lorsque le bouton Précédent est pressé, je ne reçois pas une exception OperationException comme il se doit (sur le projet GitHub Gauges, il semble que cela fonctionne)

Quelqu'un a une idée sur la façon de commencer le débogage?

Répondre

2

Que voulez-vous dire "quand accountManagerFuture.getResult() est appelé"? Maintenez-vous une référence à l'avenir après avoir appuyé sur le bouton Précédent, puis appelez le getResult() ultérieurement? Car un OperationCanceledException ne sera appelé que si vous appelez explicitement cette méthode après l'annulation de l'opération.

La compréhension du flux d'événements est un bon moyen de commencer le débogage du problème. Lorsque vous appuyez sur le bouton de retour onBackPressed() est appelé; onBackPressed() appellera alors finish(), et selon le code source pour la classe AccountAuthenticatorActivity, la méthode surchargée finish() enverra le signal qui annule finalement la tâche. Cela vous aide-t-il à démarrer?

Notez également que lorsque vous appuyez sur le bouton de retour, l'opération ne sera annulée que si l'opération est encore en cours. Si l'opération est déjà terminée, aucune exception ne sera levée (puisqu'il n'y a pas d'opération actuellement active pour l'infrastructure à annuler). En d'autres termes, vous ne pourriez pas obtenir une exception lorsque vous appuyez sur le bouton de retour ... tout dépend si l'opération est déjà terminée ou non.

Si vous rencontrez toujours des problèmes, je considérerais d'ajouter du code à votre question d'origine, car sinon, il nous sera difficile de vous aider. :)

+1

Beaucoup Merci beaucoup. La chose clé que vous avez mentionnée est le fait que finish() est surchargé par AccountAuthenticatorActivity. À un moment donné, j'ai changé mon activité pour hériter de PagerActivity et j'ai oublié de copier-coller les méthodes AccountAuthenticatorActivity! –

Questions connexes