java - Android:NullPointerException:尝试在空对象引用上调用接口方法
问题描述
我知道这已经被问过很多次了,但是我已经完成了所有以前的问题,并且无法将答案应用于我的特定问题。
我的设置中有一个 SwitchPreference 可以打开或关闭一组特定的活动。那组活动包含在菜单中,所以我希望能够在项目无效时隐藏它。
在我的菜单中,该项目由
<item
android:id="@+id/action_most_recent_summary"
android:orderInCategory="20"
android:visible="true"
android:title="@string/action_most_recent_summary"
app:showAsAction="never" />
然后在 MainActivity 我创建菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean do_inc_summary = sharedPreferences.getBoolean("summary", false);
if (do_inc_summary) {
menu.findItem(R.id.action_most_recent_summary).setVisible(true);
}
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
有时它不起作用!
有时应用程序崩溃,我在 logcat 中收到以下错误
java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setVisible(boolean)' on a null object reference
at com.example.cgpagerv2.MainActivity.onCreateOptionsMenu(MainActivity.java:52)
第 52 行是 menu.findItem 行。所以我认为它告诉我“菜单”或“do_inc_summary”为空,但我不明白为什么。
解决方案
您正在尝试在充气之前访问项目,实例将在充气后可用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean do_inc_summary = sharedPreferences.getBoolean("summary", false);
//inflate first
getMenuInflater().inflate(R.menu.menu_main, menu);
//then access
if (do_inc_summary) {
menu.findItem(R.id.action_most_recent_summary).setVisible(true);
}
return true;
}
推荐阅读
- android - Android Studio 在名称上给我一个错误,说它必须是 log.v 中的“throwable tr”。有人可以解释一下为什么
- arrays - 如何在arduino的char数组中放置变量?
- visual-studio - 用于编辑和继续的 Visual Studio 快捷键:暂停、(编译)然后再次运行
- vue.js - 样式化 vuetify 组件 v-expansion-panel__header
- bash - 如何仅在文件中保存 15 秒后的命令输出?
- android - 使用 Unity 在 ARCore 中移动游戏对象的锚点
- python - 想使用beautifulsoup从标签中获取文本,尝试了所有方法但没有工作
- apache-spark - 广播哈希联接不适用于 Spark SQL 中的完全联接?
- html - 如果通过 ejs 发送到函数,重要数据在 html 页面源中可见
- php - 从多个模型的表单获取数据的问题 - Laravel