首页 > 解决方案 > 在 android 4.1 上无法获取 menuitem,它崩溃了

问题描述

我有代码,它获取菜单项并更改图标颜色。在 Android 8.1 上它工作正常,但是当我在 android 4.1.1 上测试它时,应用程序崩溃了。

Drawable drawable = menuos.getItem(1).getIcon();
                    if(drawable != null) {
                        drawable.mutate();
                        drawable.setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_ATOP);
                    }

菜单:

Menu menuos = menu

它位于 onCreateOptionsMenu

日志猫:

07-28 11:20:15.794 3443-3443/com.developerfromjokela.edison E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.NullPointerException
        at com.developerfromjokela.edison.MainActivity$5.onPageStarted(MainActivity.java:223)
        at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:318)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        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)

onCreateOptions菜单:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    menuos = menu;

    return super.onCreateOptionsMenu(menu);

}

标签: javaandroiddrawable

解决方案


如果这是引发 NPE 的行:

Drawable drawable = menuos.getItem(1).getIcon();

那么有2个选项:
menuos为空或menuos.getItem(1)为空

所以在上面的行之前这样做:

Log.i("menuos_isnull", menuos == null);
if (menuos != null) {
    Log.i("Item1_isnull", menuos.getItem(1) == null);
}

看看打印了什么。这是调试,您必须更频繁地使用它。


推荐阅读