You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android空指针异常:调用TextView.setText()时对象为null问题排查

解决TextView空指针异常:Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

这个空指针异常我太熟了!大概率是你查找TextView的方式或者时机有问题,给你梳理几个常见原因和对应的解决办法:

1. 导航抽屉的TextView不在Activity主布局里,直接findViewById找不到

如果你的nameText是在导航抽屉的头部布局(比如nav_header_main.xml)里,那直接在Activity里调用findViewById是找不到这个控件的——因为它属于导航抽屉的子布局,不是Activity主布局的直接子控件。

解决代码示例

public void fetchDb(){ 
    String email = getIntent().getExtras().getString("EMAIL");
    
    // 第一步:先找到导航抽屉的NavigationView
    NavigationView navigationView = findViewById(R.id.nav_view);
    // 第二步:获取导航抽屉的头部视图(索引0是默认的第一个头部)
    View headerView = navigationView.getHeaderView(0);
    // 第三步:通过头部视图查找对应的TextView
    TextView txtName = headerView.findViewById(R.id.nameText);
    TextView txtEmail = headerView.findViewById(R.id.emailText);
    
    // 假设你从数据库拿到了name数据,这里替换成你的查询逻辑
    String userName = "从数据库获取的用户名";
    
    txtName.setText(userName);
    txtEmail.setText(email);
}

2. 调用findViewById的时机太早,布局还没加载

如果你的fetchDb方法是在onCreate里的setContentView之前调用的,那Activity还没加载布局,自然找不到任何控件,返回null。

正确的调用顺序

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 必须先加载Activity的布局
    setContentView(R.layout.activity_main);
    // 再调用fetchDb方法
    fetchDb();
}

3. 布局里的TextView ID和代码里的不匹配

仔细检查你的布局文件(比如导航抽屉头部布局)里的TextView的android:id是否和代码里的R.id.nameText完全一致——大小写、拼写都不能错,哪怕多一个下划线都会导致找不到控件。

比如布局里如果是android:id="@+id/txt_name",代码里却写R.id.nameText,肯定会返回null。

内容的提问来源于stack exchange,提问作者Ivan Cristobal

火山引擎 最新活动