Java getSupportActionBar()NullPointerException
在活动的Java getSupportActionBar()NullPointerException,java,android,nullpointerexception,android-actionbar,android-toolbar,Java,Android,Nullpointerexception,Android Actionbar,Android Toolbar,在活动的onCreate()方法中,我有工具栏的以下代码: toolbar = (Toolbar) findViewById(R.id.tool_bar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 我的IDE让我感觉到getSupportActionBar().setDisplayHomeAsUpEnabled(true)可能会产生空点异常 我的问题是我是否应该忽略
onCreate()
方法中,我有工具栏的以下代码:
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
我的IDE让我感觉到getSupportActionBar().setDisplayHomeAsUpEnabled(true)代码>可能会产生空点异常
我的问题是我是否应该忽略它,以及如何修复它?您可以检查null,但如果它没有崩溃,则不必:
if(getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
IDE警告您可能出现NullPointerException
,因为在很多情况下,应用程序可能会抛出一个异常。例如,您可以为整个应用程序(或仅为相关的活动)使用NoActionBar主题,但仍然尝试使用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
}
这两个答案都是正确的,但如果你只是想删除警告
ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setDisplayHomeAsUpEnabled(true);
断言操作栏!=null,表示ActionBar不是null,因此对该变量调用任何方法都不会产生NullPointerException警告
我想如果你能
assert getSupportActionBar() != null
但我不确定这一点。首先给出了从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。如果工具栏位于包含布局中,我们需要使用包含标记的id,而不是工具栏标记
<include
android:id="@+id/toolbar_include"/>
<!--/**toolbar_include.xml*/-->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"/>
你知道NullPointerException是什么吗?你在使用哪个工具栏,你在使用支持工具栏吗???@VirajNalawade他在询问Android Studio发出的警告。这与实际错误无关。IDE只是警告你,伙计:)IDE不会产生nullPointerException
@Bhargav support.v7.widget.toolbar我正在使用getWindow().setFlags(WindowManager.LayoutParams.FLAG\u LAYOUT\u NO\u LIMITS,WindowManager.LayoutParams.FLAG\u LAYOUT\u NO\u LIMITS);为了得到全屏长度,我想这就是我得到这个nullPointerException的原因。是否有任何方法可以在不删除上述代码的情况下摆脱这种情况。
Toolbar toolbar=findViewById(R.id.toolbar_include);