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.
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 ...? –
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
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! –