I just recently published my first app on Google Play,¬†and after I had published it I was playing with it on my Galaxy S3 and it crashed when I tried to delete a page. I know I had this working correctly on my Nexus 7 prior to publishing it, but I didn’t test it on my phone (shame on me :(). So, I went to work trying to figure out what the problem was, and here’s part of the stack trace:

FATAL EXCEPTION: main
java.lang.NullPointerException
	at com.actionbarsherlock.view.MenuInflater.inflate(MenuInflater.java:109)
	at com.test.app.SomeFragment.onCreateOptionsMenu(SomeFragment.java:1921)
	at android.support.v4.app.Watson.onCreatePanelMenu(Watson.java:55)
	at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:559)
	at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.java:65)
	at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.java:165)
	at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:446)
	at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:820)
	at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchInvalidateOptionsMenu(ActionBarSherlockNative.java:52)
	at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:150)
	at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:156)
	at android.support.v4.app.Fragment.setHasOptionsMenu(Fragment.java:763)
	at com.test.app.SomeFragment.onCreate(SomeFragment.java:190)
	at android.support.v4.app.Fragment.performCreate(Fragment.java:1437)
	at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:877)
	at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
	at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
	at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
	at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
	at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
	at android.support.v4.view.ViewPager.populate(ViewPager.java:1064)
	at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:548)
	at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:507)
	at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:905)
	at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2772)
	at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
	at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:276)
	at com.test.app.SomeActivity.updateView(SomeActivity.java:624)
	at com.test.app.SomeActivity$LoadInfo.onPostExecute(SomeActivity.java:353)
	at com.test.app.SomeActivity$LoadInfo.onPostExecute(SomeActivity.java:1)
	at android.os.AsyncTask.finish(AsyncTask.java:631)
	at android.os.AsyncTask.access$600(AsyncTask.java:177)
	at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:137)
	at android.app.ActivityThread.main(ActivityThread.java:4950)
	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:1004)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
	at dalvik.system.NativeStart.main(Native Method)

After checking the stack trace and doing some research, I narrowed it down to an issue with setHasOptionsMenu(true) and I thought it might be a problem with the ActionBarSherlock Library. Well, I stumbled upon this post and found that setHasOptionsMenu(true) was set in onActivityCreated(). I had set it in onCreate(), since when I had looked at how to use it that’s where everyone seemed to put it…at least in the posts I looked at. Well, it was already broken, so I had nothing to lose and the other stuff I had tried didn’t fix it. I moved setHasOptionsMenu(true) from onCreate() to OnActivityCreated() and then ran a test. Bingo! That fixed the problem on my phone! I tested on my other two tablets (Nexus 7 and Motorola Xoom) and it worked like it should on both of those as well.

Anyway, just throwing this out there in case anyone else runs into this problem.