我的android项目中有以下课程:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
...
}
检查代码时android说:
Method invocation 'getSupportActionBar().setDisplayHomeAsUpEnabled(true)' at line 27 may produce 'java.lang.NullPointerException'
从理论上讲,这种情况不一定会发生,但我想知道如果发生这种情况,最好的办法是什么......
也许,使用try-catch块并向用户显示礼貌错误消息并最终退出应用程序?
编辑: 我的主要活动的xml以下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
答案 0 :(得分:1)
这只是一个警告。它说有可能getSupportActionBar()
的返回值为空。
因此,如果您想避免此警告,请在调用setDisplayHomeAsUpEnabled
方法之前进行null检查。
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
// method invoked only when the actionBar is not null.
actionBar.setDisplayHomeAsUpEnabled(true);
}
答案 1 :(得分:1)
您收到警告的原因是该方法使用标记@Nullable
进行注释,表明结果可能是null
。
基于setSupportActionBar
的{{3}}:
当设置为非null值时,getActionBar()方法将返回ActionBar对象
和常识,你可以期望它不会返回一个null对象,除非你自己没有提供有效的视图(应该立即修复)或者整个android支持库失败(非常不可能)。
如果发生错误,我会做的是抛出可理解的异常:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() == null) {
throw new IllegalStateException("Action bar not set! Toolbar view was: " + toolbar);
}
ActionBar actionBar = getSupportActionBar();