Android 2.3.x MenuItem getIcon nullPointer Ex

时间:2014-09-15 18:42:52

标签: android android-fragments menuitem

Fragment推送并替换新的Fragment;

之后

此代码在没有Android 4.x的任何异常的情况下运行 但是对于Android 2.3.x有NullPointerException。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    menu.clear();
    inflater.inflate(R.menu.menu, menu);
    menu.findItem(R.id.ab_basket).setIcon(R.drawable.ic_menu_badge);
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);

    MenuItem basketItem = menu.findItem(R.id.ab_basket);

    if (basketItem.getIcon() != null) {
        LayerDrawable icon = (LayerDrawable) basketItem.getIcon();
        setBadgeCount(icon, ((NApplication) PageManager.getActivity().getApplication()).getClientData().getUserBasketItemCount());
    }
}

** if(basketItem.getIcon()!= null)NullPointerException。 **

异常这样:

FATAL EXCEPTION: main
    java.lang.NullPointerException
            at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:582)
            at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:103)
            at android.graphics.drawable.LayerDrawable.<init>(LayerDrawable.java:95)
            at android.graphics.drawable.LayerDrawable$LayerState.newDrawable(LayerDrawable.java:612)
            at android.content.res.Resources.getCachedDrawable(Resources.java:1753)
            at android.content.res.Resources.loadDrawable(Resources.java:1664)
            at android.content.res.Resources.getDrawable(Resources.java:581)
            at android.support.v7.internal.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:417)
            at ****.fragment.main.MainFragment.onPrepareOptionsMenu(MainFragment.java:97)
            at android.support.v4.app.Fragment.performPrepareOptionsMenu(Fragment.java:1600)
            at android.support.v4.app.FragmentManagerImpl.dispatchPrepareOptionsMenu(FragmentManager.java:2004)
            at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:482)
            at android.support.v7.app.ActionBarActivity.superOnPreparePanel(ActionBarActivity.java:228)
            at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:69)
            at android.os.Handler.handleCallback(Handler.java:587)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3687)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
            at dalvik.system.NativeStart.main(Native Method)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果basketItem为null,则调用basketItem.getIcon()以nullpointer结尾

if(basketItem !=null){
}

解决您的问题