Android开发调用TextView的setText方法报NullPointerException如何解决
报错原因分析
该NullPointerException的根因是findViewById(R.id.scoreQTv)执行后返回了null,后续调用空对象的setText()方法触发崩溃。
你提到的两个同名布局文件是问题核心:Android系统会根据运行设备的API等级自动匹配对应限定符的布局资源,当前运行App的设备系统版本≥API 21,系统优先加载了layout-v21目录下的activity_score.xml。你贴出的带@+id/scoreQTv的是默认layout目录下的布局,而v21版本的同名布局中,对应分数展示的TextView没有设置scoreQTv这个id,导致控件查找失败返回空。
解决方法
- 方案1:删除冗余的v21版本布局
如果你的业务不需要针对API 21及以上设备做特殊的布局适配,直接删除layout-v21目录下的activity_score.xml即可,系统会统一加载默认layout目录下的布局文件。 - 方案2:同步两个版本布局的控件ID
打开layout-v21目录下的activity_score.xml,给对应展示分数的TextView添加android:id="@+id/scoreQTv"属性,保证两个版本布局内的相同业务控件ID完全一致。 - 验证方案:添加空判断排查问题
可以在findViewById后添加临时空判断,确认问题根因:
scoreQTv = findViewById(R.id.scoreQTv); if (scoreQTv != null) { scoreQTv.setText("My Score 18"); } else { Log.e("DEBUG", "控件查找失败,当前加载的是v21版本布局"); }
内容的提问来源于stack exchange,提问作者James Bond
相关产品推荐
相关产品推荐

