Android集成Navigation Drawer时ActionBar.setTitle空指针异常如何解决
报错原因与解决方案
报错核心是getSupportActionBar()返回了null,导致调用setTitle方法时空指针,按以下步骤排查解决:
1. 优先排查App主题配置
打开res/values/themes.xml(或styles.xml),确认你给MainActivity3配置的主题是不带内置ActionBar的类型,示例正确配置:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 其他主题配置项 --> <item name="colorPrimary">@color/your_primary_color</item> <item name="colorPrimaryVariant">@color/your_primary_variant_color</item> <item name="colorOnPrimary">@color/white</item> </style>
再打开AndroidManifest.xml,确认MainActivity3的android:theme属性引用了上面的NoActionBar主题:
<activity android:name=".MainActivity3" android:theme="@style/AppTheme" />
如果当前主题带内置ActionBar,setSupportActionBar会调用失败,自然返回null。
2. 排查布局文件Toolbar配置
检查你代码里加载的R.layout.activity_main布局文件中,Toolbar控件的id和代码中一致:
<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" />
如果id不匹配,findViewById(R.id.toolbar)会返回null,传入setSupportActionBar后也会导致getSupportActionBar返回null。
3. 可选:添加空指针防护
可以对ActionBar添加非空判断,避免极端情况崩溃:
setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setTitle("Patient Portal"); }
附带代码问题修复
你当前代码中存在逻辑错误:用户数据回显时四个字段都赋值给了nav_fullname,需要修正为对应控件:
@Override public void onDataChange(@NonNull DataSnapshot snapshot) { if (snapshot.exists()) { String name= snapshot.child("name").getValue().toString(); nav_fullname.setText(name); String email= snapshot.child("email").getValue().toString(); nav_email.setText(email); String phonenumber= snapshot.child("phonenumber").getValue().toString(); nav_contact.setText(phonenumber); String type= snapshot.child("type").getValue().toString(); nav_type.setText(type); } }
内容的提问来源于stack exchange,提问作者Vrushali Chaudhari
相关产品推荐
相关产品推荐

