调用EditText.getText()出现空指针异常,无法获取EditText输入文本
问题排查方案
报错java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()'的核心原因是你调用getText()的inputurl对象为空,说明EditText控件没有初始化成功,可按以下顺序排查:
- 检查布局加载是否正确
确认setContentView(R.layout.activity_main)加载的activity_main.xml布局文件中,确实存在你提供的id为linkvideo的EditText,id拼写和大小写完全匹配,不存在写错id、EditText放在include子布局/ Fragment布局中未被Activity直接加载的情况。如果EditText在Fragment布局中,不能在Activity的onCreate中调用findViewById初始化,需要在Fragment的onViewCreated生命周期中做控件初始化操作。你可以在inputurl=(EditText)findViewById(R.id.linkvideo);行后加断点调试,确认初始化后inputurl是否为null,快速判断是不是初始化阶段的问题。 - 检查控件类型声明是否匹配
你代码中将down_btn声明为TextView类型,如果布局中的down_btn实际是Button或其他非TextView类型的控件,findViewById会抛出类型转换异常,如果异常被捕获未抛出,会导致后续inputurl的初始化逻辑被跳过,最终inputurl为空。修改声明和实际控件类型匹配即可:
// 假设布局中down_btn是Button类型 Button down_btn; TextView show;
- 增加非空判断避免崩溃
无论哪种原因,在调用控件方法前增加非空判断都能规避空指针崩溃:
public void videoDownload(View view) { Toast.makeText(MainActivity.this, "clicking ....", Toast.LENGTH_SHORT).show(); // 增加多重非空校验 if (inputurl != null && inputurl.getText() != null) { String ans = inputurl.getText().toString().trim(); show.setText(ans); } }
- 排查混淆配置
如果你开启了代码混淆,检查混淆规则是否保留了Android控件id相关的资源,避免id被混淆导致findViewById无法找到对应控件。
内容的提问来源于stack exchange,提问作者Umer Aziz
相关产品推荐
相关产品推荐

