I’m new to java/android and trying to help out with an open source project. I decided I could learn the most from trying to fix bugs and so I’ve been running Monkey on the app to start generating crash reports with bugsense (I don’t have access to play.google crash reports). I consistently run into the crash below and since it doesn’t identify where in the code the app is having problems, I’m not even sure what exactly the problem is. I’m not asking for a line by line fix (although it is open source) but some helpful hints would be much appreciated.
Complete Repo: https://github.com/rackspace/android-rackspacecloud
Stacktrace + source: http://pastebin.com/YkX7NvdD
Stacktrace:
// CRASH: com.rackspace.cloud.android (pid 3330)
// Short Msg: java.lang.NullPointerException
// Long Msg: java.lang.NullPointerException
// Build Label: google/takju/maguro:4.1.1/JRO03C/398337:user/release-keys
// Build Changelist: 398337
// Build Time: 1341437384000
// java.lang.NullPointerException
// at android.widget.Spinner$DialogPopup.dismiss(Spinner.java:828)
// at android.widget.Spinner$DialogPopup.onClick(Spinner.java:862)
// at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:924)
// at android.widget.AdapterView.performItemClick(AdapterView.java:298)
// at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
// at android.widget.AbsListView.onKeyUp(AbsListView.java:2996)
// at android.widget.ListView.commonKey(ListView.java:2196)
// at android.widget.ListView.onKeyUp(ListView.java:2051)
// at android.view.KeyEvent.dispatch(KeyEvent.java:2633)
// at android.view.View.dispatchKeyEvent(View.java:7086)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1354)
// at android.widget.ListView.dispatchKeyEvent(ListView.java:2026)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
// at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1892)
// at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1369)
// at android.app.Dialog.dispatchKeyEvent(Dialog.java:702)
// at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1819)
// at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3575)
// at android.view.ViewRootImpl.deliverKeyEvent(ViewRootImpl.java:3531)
// at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3113)
// at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4153)
// at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4132)
// at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4224)
// at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
// at android.os.MessageQueue.nativePollOnce(Native Method)
// at android.os.MessageQueue.next(MessageQueue.java:125)
// at android.os.Looper.loop(Looper.java:124)
// at android.app.ActivityThread.main(ActivityThread.java:4745)
// at java.lang.reflect.Method.invokeNative(Native Method)
// at java.lang.reflect.Method.invoke(Method.java:511)
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
// at dalvik.system.NativeStart.main(Native Method)
//
** Monkey aborted due to error.
Events injected: 5252
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=23 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=47382ms (0ms mobile, 47382ms wifi, 0ms not connected)
** System appears to have crashed at event 5252 of 10000 using seed 0
According to the code I am seeing at GrepCode, we have this :
So your NPE is caused by
mPopupwhich is privateAlertDialogofDialogPopup(private class ofSpinner), probably the dialog to show the options of the spinner when you click it.mPopupis only set to something different from null atDialogPopup.show(). That method is called atSpinner.performClick(),i.e., when the spinner is clicked.But then this is the weird part. The stack trace seem to be when an item of the
mPopupwas clicked, becauseDialogPopupis set as itsOnClickListener. So at that point mPopup should not be null. But whenDialogPopup.dismiss()it is null.What can explain that? Here’s my hypothesis. Well, monkey usually is pretty fast. Faster than actual users. It might be able to click two items before the mPopup was really dismissed by the first
DialogPopup.onClick(). So we have two calls toDialogPopup.dismiss(), with the second cauing the NPE.So here are my conclusions: