EditText为空时应用崩溃,如何实现Toast提示而非崩溃?
空输入时APP崩溃问题修复方案
问题出在代码执行顺序:你先尝试把输入的字符串转成整数,之后才判断字符串是否为空。当用户未输入任何内容时,空字符串调用Integer.parseInt()会直接抛出NumberFormatException,导致APP崩溃,根本走不到空判断的逻辑分支显示Toast。
修复后的代码调整了逻辑顺序,先做空判断,同时增加非数字输入的异常处理,避免其他输入导致的崩溃:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_thermometer, container, false); Button enter = view.findViewById(R.id.btTemp); EditText degrees = view.findViewById(R.id.nmDegrees); enter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String tempo = degrees.getText().toString().trim(); // 处理仅输入空格的情况 if(tempo.isEmpty()){ Toast.makeText(requireContext(), "Cannot Be Blank!!", Toast.LENGTH_LONG).show(); return; // 空输入直接返回,不执行后续逻辑 } int temperature; try { temperature = Integer.parseInt(tempo); } catch (NumberFormatException e) { Toast.makeText(requireContext(), "Please Enter Valid Number!!", Toast.LENGTH_LONG).show(); return; } if(temperature > 100 || temperature < 40){ Toast.makeText(requireContext(), "Not Viable!!", Toast.LENGTH_LONG).show(); } else { SharedPreferences sharedPreferences = getActivity().getSharedPreferences("Thermo", Context.MODE_PRIVATE); SharedPreferences.Editor ed = sharedPreferences.edit(); ed.putInt("lastTemp", temperature); ed.apply(); Toast.makeText(requireContext(), "Data Saved!!", Toast.LENGTH_LONG).show(); Bundle onOrOff = new Bundle(); getParentFragmentManager().setFragmentResult("dataFromThermometer", onOrOff); degrees.setText(""); } } }); return view; }
关键修改点:
- 优先判断输入字符串是否为空(通过
trim()过滤仅输入空格的无效情况),为空直接触发提示并终止后续代码 - 用
try-catch包裹整数转换逻辑,处理用户输入非数字内容的场景,避免额外崩溃 - 调整逻辑执行顺序,确保只有合法输入才会进入温度范围校验和数据保存流程
内容的提问来源于stack exchange,提问作者Isa
相关产品推荐
相关产品推荐

