NPE при рисовании TabWidget в Android (только на HTC Magic?) - PullRequest
2 голосов
/ 07 января 2010

Я получил сообщение от пользователя приложения, которое я написал, что он получает ФК при запуске определенной деятельности. Мне не удалось воспроизвести проблему на эмуляторе или на моем HTC Hero (под управлением 1.5), но этот пользователь, работающий под управлением HTC Magic (с 1.6), каждый раз сталкивается с этой ошибкой.

Что меня беспокоит, так это то, что ни один шаг в трассировке стека на самом деле не содержит никакого кода в моем приложении (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)

Полный дамп, если я пропустил что-то интересное

Я предполагаю, что с моим макетом может быть что-то не так. Это довольно многословно, поэтому я выкладываю это здесь , а не вставляю все это на SO.

Существует вкладка, в которой одна вкладка связана с видом прокрутки, svFilmInfo, а другая - с линейным макетом llComments.

Хост вкладок заполняется так:

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));

Поскольку я не могу воспроизвести ошибку самостоятельно и не могу найти в трассировке стека никаких упоминаний о том, что может быть причиной ошибки, я не совсем знаю, с чего начать устранение этой ошибки.

Буду признателен за любые указатели.

Ответы [ 2 ]

3 голосов
/ 07 января 2010

Я сталкиваюсь с такими трассировками стека, когда люди имеют TabHost в своем макете, но не добавляют TabSpecs к нему. Вы показываете код, куда добавляете вкладки - уверены ли вы, что он вызывается при любых обстоятельствах?

2 голосов
/ 12 апреля 2010

Я получил ту же ошибку в моем приложении, но только на Android 1.6 и выше - он работал на 1.5.

Причина: Первоначальная активность приложения расширяла TabActivity, но макет XML с виджетом TabHost не был загружен с помощью setContentView () в области действия onCreate () (его загрузка планировалась через Runnable чуть позже).

Затем сначала попытайтесь нарисовать такую ​​не полностью обработанную TabActivity на экране, что вызвало сбой с NullPointerException в android.widget.TabWidget.dispatchDraw (TabWidget.java:173)

Вам нужно загрузить XML или создать экземпляр TabHost и заполнить его новыми программными спецификациями программно, прежде чем завершится onCreate.

...