java - 在 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);
}
解决方案
如果这是引发 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);
}
看看打印了什么。这是调试,您必须更频繁地使用它。
推荐阅读
- c - 查找字长统计的程序
- reactjs - 当我传递到另一个屏幕时如何停止 Firebase 侦听器?
- c# - 为什么我有错误“'SQLiteCommand'不包含'Parameters'的定义”?
- c# - c# if not null then assign value的简写
- c# - 如何向 ASP.NET Core 中的控制器方法添加属性以生成 OpenAPI 扩展
- java - 如何使用 JDBC 驱动程序连接到 Databricks Delta 表
- java - 模拟单元测试和 UI 测试的最终类
- javascript - 用javascript检测文本省略号
- python-3.x - 在 df 的特定列中查找 NaN 值
- python-3.x - Mail Gun 电子邮件在 Google App Engine 上的 Flask 中不起作用