2010-10-16 6 views
8

Quelqu'un peut-il m'expliquer pourquoi le gestionnaire Android "Catch" n'initialisera pas un objet Exception? Lorsqu'une erreur se produit et que mon code tente d'initialiser un objet Exception, il est TOUJOURS NULL.Exception est NULL toujours

Ce qui précède n'a aucun sens car l'exception doit toujours initialiser la période de l'objet Exception. Il ne devrait jamais être nul si une erreur se produit. Je suis assez nouveau à l'Eclipse Android IDE/SDK et je suis sûr que je n'ai pas tout configuré à 100%. Cependant, ce type de fonctionnalité me semble que cela devrait fonctionner tout le temps, pas après avoir été configuré.

+1

Pouvez-vous montrer la partie pertinente de votre code? Quelles preuves avez-vous utilisées pour arriver à la conclusion que l'exception est nulle? Comment avez-vous observé cette preuve? –

+0

Salut, j'ai la configuration de gestionnaire ci-dessous: catch (Exception ex) { \t System.out.println ("ERREUR: \ n \ n" + ex.toString()); } Lorsque j'exécute le débogage, l'exception est toujours NULL .... quelle que soit l'erreur. Il n'initialise jamais – John

+0

Vous avez un point de rupture dans le bloc catch, et ex est nul? Je trouve cela difficile à croire ... Si ex était null, votre instruction print afficherait une exception de pointeur nul, c'est ce qui se passe? –

Répondre

6

Une cause possible est que vous essayez de faire une connexion réseau sur votre thread principal, qui fonctionne très bien avant 2.3.3/nid d'abeille (niveau SDK < 10 par exemple), mais sera jeté comme un

android.os.NetworkOnMainThreadException

depuis le niveau du SDK 10.

Vérifiez ceci: http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

Le problème est que Eclipse ne sait pas vraiment à cette exception (car elle est basée sur certaines conditions propulsée vers différents niveaux de SDK si Eclipse probablement ne peut pas obtenir une instance correcte de cette exception, cela explique pourquoi votre objet d'exception est toujours NULL)

Solution: créez un thread distinct ou utilisez AsyncTask pour effectuer votre demande de connexion réseau.

+0

Comment est-il possible d'appeler le gestionnaire d'exceptions sans une instance de l'exception? Le code du gestionnaire d'exception doit tester efficacement 'thrownException instanceof CatchException', et sans une instance de l'exception qui va échouer. –

Questions connexes