安卓应用加载报错:调用ActionBar.setTitle出现空对象引用异常
空指针异常原因
报错栈信息:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference at com.example.android.bettingapp.DashboardActivity.onCreate(DashboardActivity.kt:27)
该异常是setupActionBarWithNavController方法内部调用ActionBar.setTitle时,ActionBar实例为null导致,结合代码有两个核心触发点:
- 未通过ViewBinding正确获取Toolbar实例:代码中
setSupportActionBar(myToolBar)直接使用myToolBar,没有通过已初始化的dashboardBinding获取布局中的Toolbar控件,导致传入setSupportActionBar的参数为null,后续supportActionBar全局为空。 - 逻辑顺序冲突:代码调用
supportActionBar?.hide()后仍执行setupActionBarWithNavController,该方法默认会操作ActionBar更新标题,即使前面Toolbar不为空,hide操作也可能导致后续调用异常。
修复方案
方案一:保留ActionBar配合导航使用
- 修正Toolbar引用,替换
setSupportActionBar(myToolBar)为:
setSupportActionBar(dashboardBinding.myToolBar)
- 删除多余的
supportActionBar?.hide()代码,最终调整后的onCreate相关代码如下:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) dashboardBinding = ActivityDashboardBinding.inflate(layoutInflater) setContentView(dashboardBinding.root) // 修正Toolbar引用 setSupportActionBar(dashboardBinding.myToolBar) val navView: BottomNavigationView = dashboardBinding.bottomNavView val navController = findNavController(R.id.nav_host_fragment) val appBarConfiguration = AppBarConfiguration( setOf( R.id.homeFragment, R.id.newBoastFragment, R.id.myBoastFragment, R.id.profileFragment ) ) setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setHomeButtonEnabled(true) }
方案二:完全隐藏ActionBar
如果不需要展示顶部ActionBar,直接删除所有ActionBar相关操作即可,仅保留底部导航绑定逻辑:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) dashboardBinding = ActivityDashboardBinding.inflate(layoutInflater) setContentView(dashboardBinding.root) val navView: BottomNavigationView = dashboardBinding.bottomNavView val navController = findNavController(R.id.nav_host_fragment) navView.setupWithNavController(navController) }
内容的提问来源于stack exchange,提问作者Jaanu
相关产品推荐
相关产品推荐

