getSupportActionBar()NullPointerException

时间:2015-11-29 12:44:03

标签: java android nullpointerexception android-actionbar android-toolbar

onCreate()活动方法中,我有ToolBar的代码:

toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

我的IDE让我感到温暖,getSupportActionBar().setDisplayHomeAsUpEnabled(true);可能会产生 NullPointerException

我的问题是我应该忽略它,我怎么能解决它?

5 个答案:

答案 0 :(得分:5)

IDE会警告您有可能NullPointerException,因为在很多情况下应用可以抛出一个。{对于示例,您可以为整个Application使用 NoActionBar 主题(或仅针对相关activity),但您仍尝试检索对该getActionBar()的引用使用getSupportActionBar()(或toolbar = (Toolbar) findViewById(R.id.tool_bar); if (toolbar != null) { // you can safely invoke methods on the Toolbar setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } else { // Toolbar is null, handle it } )的操作栏。

请忽略警告,但请记住上面的注释。

<强>更新

您可以通过明确检查可为空性来消除警告:

imhist()

答案 1 :(得分:2)

您可以检查null,但如果它没有崩溃,则不应该是nessessary:

if(getSupportActionBar() != null) {
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

答案 2 :(得分:2)

这两个答案都是正确的,但如果您只想删除警告

ActionBar actionBar = getSupportActionBar();

assert actionBar != null;

actionBar.setDisplayHomeAsUpEnabled(true);

断言actionBar!= null ,表示ActionBar不为null,因此调用此变量的任何方法都不会产生NullPointerException警告。

我想如果你

它会起作用
assert getSupportActionBar() != null

但我不确定。

答案 3 :(得分:1)

如果工具栏在包含布局,我们需要使用包含标签的id,而不是工具栏标签。

<include  
android:id="@+id/toolbar_include"/>


<!--/**toolbar_include.xml*/-->

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"/>

就是用

 Toolbar toolbar=findViewById(R.id.toolbar_include);

答案 4 :(得分:0)

首先给出了从NullPointerException中转义的答案,并在将其放入代码后: -

if(getSupportActionBar() != null) {
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

此后只解决异常问题,您也不会将工具栏设为空。 我想说的只是检查你的活动xml你已经宣布了你的工具栏,我想这会重新解决你的问题。

  <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar1"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

只需将工具栏放入您的活动Xml中。