2010-06-22 5 views
0

J'essaie d'intercepter une exception de connexion lancée par la classe à laquelle appartient readerAccount dans le code ci-dessous. Toutefois, la seule partie de l'instruction catch qui arrive est la fonction Log.w(). J'avais l'impression que pendant une déclaration catch, vous avez la possibilité de récupérer des erreurs, mais le programme noircit complètement l'écran et la boîte de dialogue n'est pas affichée, pas plus que le Toast. Que se passe t-il ici?Gestion des exceptions Android, arrêt du programme

+0

Ce code s'exécute-t-il dans le thread de l'interface utilisateur? –

+0

est-il possible que votre code dans l'instruction catch lève une autre exception? (par exemple cmDialog est null, donc cmDialog.show() lèverait une exception). Que voyez-vous dans logcat? msg d'exception, trace de pile ?? –

+0

cmDialog est défini plus tôt. sinon vous auriez une erreur de compilation ... non? Je peux afficher la boîte de dialogue en dehors de l'instruction catch et afficher le Toast sans problème. mais cela ne fonctionnera pas dans l'instruction catch. de plus, l'appel Log.w() fonctionne bien: je peux le voir dans logcat. Le problème est que lorsque l'exception se produit, l'écran devient noir, ce qui est plutôt inattendu, donc il semble que la sortie vidéo s'arrête simplement, mais la journalisation fonctionne très bien. Pourquoi est-ce? – moonlightcheese

Répondre

0

J'ai la réponse à cette question. le code qui doit être exécuté après l'interaction du dialogue doit toujours être placé dans onClickListener pour la boîte de dialogue spécifique affichée. la fonction login() doit donc être appelée depuis onClickListener et si une connexion échoue, la boîte de dialogue doit être rappelée jusqu'à ce qu'une connexion réussisse.

merci quand même tout le monde.

0

Il est possible que l'appel .login() entraîne des modifications des autres objets que vous utilisez dans l'instruction catch (spécialement lorsque quelque chose se passe mal et qu'une exception est levée), ou au verrouillage de ressources liées d'une manière ou d'une autre avec eux, ce qui pourrait expliquer pourquoi les appels .show() et .makeTest (...) n'agissent pas comme vous l'attendiez, dans l'instruction catch. Vous voudrez peut-être essayer d'imprimer des attributs et des informations sur l'objet cmDialog, avant l'instruction try, et dans l'instruction catch, avant l'appel .show(), pour pouvoir comparer et vérifier si quelque chose a modifié l'état de l'objet ou l'état de l'une de ses ressources utilisées.

J'espère que cela aide.