You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓应用加载报错:调用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配合导航使用

  1. 修正Toolbar引用,替换setSupportActionBar(myToolBar)为:
setSupportActionBar(dashboardBinding.myToolBar)
  1. 删除多余的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:18:00