Поведение пользовательского интерфейса Android иногда вызывает исключение NullPointerException - PullRequest
1 голос
/ 28 июня 2011

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

06-05 12:05:58.939: DEBUG/AndroidRuntime(3149): Shutting down VM
06-05 12:05:58.939: WARN/dalvikvm(3149): threadid=1: thread exiting with uncaught exception (group=0x40028a00)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149): FATAL EXCEPTION: main
06-05 12:05:58.949: ERROR/AndroidRuntime(3149): java.lang.NullPointerException
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.AbsListView.obtainView(AbsListView.java:1304)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     atandroid.widget.ListView.makeAndAddView(ListView.java:1727)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.ListView.fillDown(ListView.java:652)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.ListView.fillGap(ListView.java:623)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.os.Handler.handleCallback(Handler.java:587)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.os.Looper.loop(Looper.java:142)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.app.ActivityThread.main(ActivityThread.java:4914)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at java.lang.reflect.Method.invokeNative(Native Method)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at java.lang.reflect.Method.invoke(Method.java:521)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at dalvik.system.NativeStart.main(Native Method)

Обратите внимание, что есть только ссылки на внутренние объекты Android.

В другой раз мы сталкивались с этим, другие трассировки стека заканчивали тем, что снова бросали NPE только с внутренней трассировкой стека Android, без какой-либо ссылки на какой-либо из наших объектов или методов в нем, в этом случаебыл виджет, и в последний раз, когда я видел такой NPE, он пришел из LayoutView, и я также нашел еще один вопрос , какой NPE был брошен в GroupView.

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

Кто-нибудь еще испытывал это?Может ли это быть связано с тем, как мы размещаем наши компоненты пользовательского интерфейса?Даже если у вас есть идея, пожалуйста, поделитесь ...

Спасибо, Адам Зехави.

1 Ответ

2 голосов
/ 28 июня 2011

Наиболее вероятной причиной является то, что ваш ListView обновляется до того, как вы вызвали setListAdapter() для него.Из-за прерывистости я бы предположил, что у вас может быть проблема с поточностью: один поток вызывает обновление вашего ListView до того, как другой вызовет setListAdapter().

...