Android에서 Tabwidget을 그릴 때 NPE (HTC Magic에서만?)
-
19-09-2019 - |
문제
특정 활동을 시작할 때마다 FC를 얻는 앱 사용자로부터 보고서를 받았습니다. 에뮬레이터 나 HTC 영웅 (1.5 실행)에서 문제를 재현 할 수 없었지만 HTC Magic을 실행하는이 사용자는 매번이 오류에 직면하고 있습니다.
나를 귀찮게하는 것은 StackTrace의 단일 단계가 실제로 내 앱에 코드를 포함하지 않는다는 것입니다.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)
그러므로 내 레이아웃에 문제가있을 수 있다고 생각합니다. 그것은 꽤 장점입니다 여기에 게시하고 있습니다, 모든 것을 붙잡는 대신.
하나의 탭이 ScrollView에 연결되어있는 TabWidget이 있습니다. 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));
오류를 직접 재현 할 수없고 오류를 일으킬 수있는 것의 스택 추적에서 언급을 찾을 수 없으므로 문제 해결을 시작해야 할 곳을 잘 모르겠습니다.
어떤 포인터에 감사드립니다.
해결책
나는 사람들이 TabHost
레이아웃에서는 추가하지 않습니다 TabSpecs
그것에. 탭을 추가하는 코드가 표시됩니다. 모든 상황에서 호출되는 것이 확실합니까?
다른 팁
응용 프로그램에서 동일한 오류가 발생했지만 Android 1.6 이상에서만 1.5에서 작동했습니다.
이유: 초기 응용 프로그램 확장 Tabactivity 그러나 Tabhost 위젯을 사용한 레이아웃 XML은 OnCreate () 범위에서 setContentView ()를 통해로드되지 않았습니다. (나중에 런 가능성을 통해로드 할 예정이었습니다).
그런 다음 먼저 화면에 실제로 처리되지 않은 Tabactivity를 그리는 시도를 시도하십시오.
oncreate가 끝나기 전에 XML을로드하거나 Tabhost를 인스턴스화하고 프로그래밍 방식으로 NewTabSpec을 채우십시오.