【问题标题】:Android:NullPointerException: Attempt to invoke interface method on a null object reference [duplicate]Android:NullPointerException:尝试在空对象引用上调用接口方法[重复]
【发布时间】:2021-02-25 12:34:57
【问题描述】:

我知道这个问题已经被问过很多次了,但是我已经解决了所有以前的问题,但无法将答案应用于我的特定问题。

我的设置中有一个 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”为空,但我不明白为什么。

【问题讨论】:

    标签: java android nullpointerexception


    【解决方案1】:

    您正在尝试在充气之前访问项目,实例将在充气后可用

    @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:visible 设置为 true 还是 false 以及我在“设置”页面中执行的操作。
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2020-09-29
    • 2016-04-23
    • 2023-03-25
    • 2019-12-20
    相关资源
    最近更新 更多