在setSupportActionBar之后,getSupportActionBar可以为空吗?

时间:2015-08-04 09:45:48

标签: android android-studio android-toolbar

我是否应该检查getSupportActionBar()方法,即使在该方法的前面我已使用getSupportActionBar()设置了支持操作栏?

onCreate()我有三行

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(getIntent().getStringExtra(TITLE_KEY));
然后,Android Studio会向我提供警告

"Method invocation may produce java.lang.NullPointerException"

假设 findViewById 方法确实返回了有效的ToolBar对象,我是否仍需要检查getSupportActionBar()方法,或者只是忽略警告是否安全?

4 个答案:

答案 0 :(得分:3)

这可能会产生NullPointer异常。

您已创建新的工具栏对象,可以使用toolbar.setTitle(getIntent().getStringExtra(TITLE_KEY));设置标题。在致电setSupportActionBar(toolbar);

之前,您需要执行此操作

无需调用getSupportActionBar(),因为已设置的操作栏是工具栏。因此,您可以直接使用该对象来编辑工具栏。这比getSupportActionBar();

答案 1 :(得分:2)

我的建议是: - 不检查null,因为警告不是错误

你正在谈论的警告说“它可能产生”。它没有说'必须生产'。

但如果你想要双重确定你可以检查空

答案 2 :(得分:0)

为避免出现此警告,您始终可以检查ActionBar对象是否为空。

ActionBar mActionBar = getSupportActionBar();

    if (mActionBar != null) {
        mActionBar.setTitle(getIntent().getStringExtra(TITLE_KEY));
    }

答案 3 :(得分:0)

不,你不应该检查这个。因为如果假设失败(例如,如果findViewById(R.id.toolbar)因为您在项目中的另一个文件中引入了错误而开始返回null),那么执行希望抛出NullPointerException,所以你在测试时很容易找到错误。

换句话说:在我看来,最好的方法是fail fast

我的代码看起来像是这样,其中的评论使警告无声:

//noinspection ConstantConditions: Action bar should always be present. If not, we prefer a NullPointerException here.
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);