我們有一個Android應用程序,它非常穩定,可以在幾天內無任何錯誤地工作。過一段時間,我們遇到一個應用程序崩潰,並且每次我在堆棧看了看時間跟蹤它看起來是這樣的:Android UI行爲有時會拋出NullPointerException
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內部對象引用。
還有其他時間我們經歷過這種情況,其他堆棧跟蹤結束時也會再次使用Android內部堆棧跟蹤拋出NPE,而沒有引用任何其中的對象或方法,在這種情況下,它是小部件,最後一次我看到這樣的NPE來自LayoutView,而且我還發現另一個question哪個NPE已經在GroupView中拋出。
重點是應用程序的工作原理,我可以嘗試使用同樣的場景重現崩潰一千次,但沒有看到發生這種情況,但偶爾會發生這種情況。
有沒有其他人會遇到這種情況? 它可能與我們佈局我們的UI組件的方式有關嗎? 即使你只是有一個想法,請分享...
謝謝, 亞當澤哈維。
您的ListAdapter的代碼在哪裏?或者您使用默認的代碼?這似乎是檢索視圖時的問題。 – codinguser
這不是發生在代碼中的一個地方,我們想知道這是Android問題還是實現問題? – TacB0sS