Android Studio:判断EditText是否为空时应用崩溃,求解决方案
解决EditText空判断导致的崩溃问题
老哥,你的应用闪退大概率逃不开这两个原因:要么是EditText控件没正确初始化触发空指针异常,要么是直接把空字符串转成数值类型(比如int/double)时抛出格式异常。我给你一步步捋清楚怎么修复:
第一步:先把控件初始化的顺序搞对
一定要在setContentView(R.layout.你的布局文件)之后再调用findViewById!不然控件对象会是null,调用getText()直接就空指针崩溃了。正确的初始化顺序应该是这样的:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); // 先加载布局文件 // 再初始化所有控件 campoBNow = findViewById(R.id.txtMenorBNow); campoLucro = findViewById(R.id.txtLucro); btnClicou = findViewById(R.id.你的按钮ID); // 最后设置点击事件 btnClicou.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 这里写你的判断逻辑 } }); }
第二步:写个安全的空判断逻辑
判断EditText是否为空,得考虑两种情况:控件本身是否为null,以及输入的文本是不是空字符串(包括用户只输入空格的情况)。我给你写个复用性强的工具方法:
// 工具方法:判断EditText是否为空 private boolean isEditTextEmpty(EditText editText) { if (editText == null) { return true; // 控件都没初始化,直接视为空 } String inputText = editText.getText().toString().trim(); return inputText.isEmpty(); }
然后在点击事件里调用这个方法,就能安全判断了,如果之后要转数值类型,记得加异常捕获避免崩溃:
btnClicou.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean isBNowEmpty = isEditTextEmpty(campoBNow); boolean isLucroEmpty = isEditTextEmpty(campoLucro); if (isBNowEmpty || isLucroEmpty) { // 有输入框为空,给用户提示比如Toast Toast.makeText(YourActivity.this, "请填写完整内容哦", Toast.LENGTH_SHORT).show(); return; } // 如果需要把输入内容转成数值,一定要加异常捕获! try { double bNowValue = Double.parseDouble(campoBNow.getText().toString().trim()); double lucroValue = Double.parseDouble(campoLucro.getText().toString().trim()); // 这里写你的业务逻辑 } catch (NumberFormatException e) { // 输入的不是合法数字,提示用户 Toast.makeText(YourActivity.this, "请输入有效的数字呀", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } });
为啥之前会崩溃?
- 如果你的
findViewById放在setContentView之前,campoBNow会是null,调用getText()直接触发NullPointerException,直接闪退。 - 如果输入框是空的,你直接去转成数字(比如
Double.parse("")),会抛出NumberFormatException,同样导致崩溃。
按照上面的代码改,就能安全处理空判断,再也不会闪退啦!
内容的提问来源于stack exchange,提问作者Thiago Henrique Dos Santos
相关产品推荐
相关产品推荐

