2010-01-07 15 views
2

J'ai reçu un rapport de l'utilisateur d'une application que j'ai écrit qu'il obtient FC lors du démarrage d'une certaine activité. Je n'ai pas été capable de reproduire le problème sur l'émulateur ou sur mon HTC Hero (en cours d'exécution 1.5), mais cet utilisateur exécutant HTC Magic (avec 1.6) est confronté à cette erreur à chaque fois.NPE lorsque vous dessinez TabWidget dans android (uniquement sur HTC Magic?)

Ce qui me dérange est que pas une seule étape dans le stacktrace comprend en fait un code dans mon application (com.filmtipset)

01-07 00:10:26.773 I/ActivityManager( 141): Starting activity: Intent { cmp=com.filmtipset/.ViewMovie (has extras) } 
01-07 00:10:27.023 D/AndroidRuntime(2402): Shutting down VM 
01-07 00:10:27.023 W/dalvikvm(2402): threadid=3: thread exiting with uncaught exception (group=0x4001e170) 
01-07 00:10:27.023 E/AndroidRuntime(2402): Uncaught handler: thread main exiting due to uncaught exception 
01-07 00:10:27.083 E/AndroidRuntime(2402): java.lang.NullPointerException 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.widget.TabWidget.dispatchDraw(TabWidget.java:173) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewGroup.drawChild(ViewGroup.java:1529) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewGroup.drawChild(ViewGroup.java:1529) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewGroup.drawChild(ViewGroup.java:1529) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.View.draw(View.java:6552) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.widget.FrameLayout.draw(FrameLayout.java:352) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewGroup.drawChild(ViewGroup.java:1531) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.View.draw(View.java:6552) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.widget.FrameLayout.draw(FrameLayout.java:352) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1883) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewRoot.draw(ViewRoot.java:1332) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewRoot.performTraversals(ViewRoot.java:1097) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.view.ViewRoot.handleMessage(ViewRoot.java:1613) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.os.Looper.loop(Looper.java:123) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at android.app.ActivityThread.main(ActivityThread.java:4320) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at java.lang.reflect.Method.invokeNative(Native Method) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at java.lang.reflect.Method.invoke(Method.java:521) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
01-07 00:10:27.083 E/AndroidRuntime(2402): at dalvik.system.NativeStart.main(Native Method) 

Full dump here if I've missed anything of interest

Je suppose donc qu'il pourrait y avoir quelque chose de mal avec ma mise en page. C'est assez verbeux, donc I'm posting it here, plutôt que de coller le tout sur SO.

Il y a un tabwidget, où un onglet est connecté à la vue de défilement, svFilmInfo, et un à la disposition linéaire llComments.

L'hôte onglet est renseigné en tant que tel:

Drawable commentSelector = getResources().getDrawable(R.drawable.tabcomment); 
Drawable infoSelector = getResources().getDrawable(R.drawable.tabinfo); 

mTabHost = getTabHost(); 
mTabHost.getTabWidget().setBackgroundColor(Color.BLACK); 
mTabHost.addTab(mTabHost.newTabSpec("tabInfo").setIndicator("Filminfo", infoSelector).setContent(R.id.svFilmInfo)); 
mTabHost.addTab(mTabHost.newTabSpec("tabInfo").setIndicator("Kommentarer", commentSelector).setContent(R.id.llComments)); 

Comme je ne peux pas reproduire l'erreur moi-même, et que je ne trouve aucune mention dans la trace de la pile de ce qui pourrait être la cause de l'erreur, je ne sachez par où commencer le dépannage.

J'apprécierais n'importe quel pointeur.

Répondre

3

Je cours dans des traces de pile comme cela quand les gens ont un TabHost dans leur disposition mais n'y ajoutent pas TabSpecs. Vous montrez le code dans lequel vous ajoutez des onglets - êtes-vous sûr que cela est appelé dans toutes les circonstances?

+0

La première ligne de code affichée ('Drawable commentSelector ...') suit immédiatement la seule occurrence du paramètre d'une vue de contenu: 'setContentView (R.layout.viewmovie);'. Beaucoup de choses se passent avant cela, donc je devine que les choses pourraient mal se passer et que ce code ne soit pas exécuté (bien que ce soit remarquable si c'est le cas), mais il sera certainement toujours exécuté si la vue de contenu est défini sur cette 'layout.viewmovie' qui est la vue qui a le tabhost. Cela devrait être tout ce qui compte, dans ce cas, c'est vrai ...? –

+0

Oui, cela devrait être tout ce qui compte. Votre activité est-elle une TabActivity? Sinon, vous devez appeler setup() sur TabHost avant d'ajouter des TabSpecs. Sinon, rien ne me saute dessus qui pourrait être faux. – CommonsWare

+0

Hmm, je viens de demander à l'utilisateur de tester une autre version de l'application, où 'setContentView' et le bloc d'installation de l'onglet est la première chose qui se passe dans' onCreate', et l'utilisateur rapporte que les problèmes ont été résolus, Je n'ai pas encore déterminé quel chemin d'exécution le code doit avoir suivi pour produire cette erreur, je vais conclure que le problème doit être en relation avec votre réponse. Merci! –

2

J'ai eu la même erreur dans mon application, mais seulement sur Android 1.6 et supérieur - il a travaillé sur 1.5.

La raison: Activité de l'application initiale prolongée TabActivity mais XML mise en page avec un widget TabHost n'a pas été chargé par setContentView() dans onCreate() portée (il devait charger plus tard par l'intermédiaire Runnable un peu).

Alors d'abord essayer de tirer effectivement comme TabActivity non entièrement traitées à l'écran a provoqué l'accident avec NullPointerException à android.widget.TabWidget.dispatchDraw (TabWidget.java:173)

Vous devez charger XML ou instancier TabHost et remplir avec newTabSpecs par programme avant la fin de onCreate.