【问题标题】:Exception Handling in If statement?If语句中的异常处理?
【发布时间】:2016-01-01 21:20:37
【问题描述】:

我正在努力创建一个非常简单的应用程序。有与产品编号匹配的产品名称。用户输入一个数字并显示相应的名称。

editTextField1 = 用户类型数

button1 = 搜索按钮

editTextField2 = 产品名称出现

现在我的代码正在运行,但只有一个问题,当用户没有输入任何内容并点击button1 时,应用程序崩溃了。所以我可能需要某种异常处理程序?我正在努力解决它。我知道我是如何通过声明大量变量来编码的,这很啰嗦。

public class MainActivity extends AppCompatActivity {

private Button button1;
private EditText editText1;
private EditText editText2;
private int a = 123;
private String b = "TV";
private int c  = 333;
private String d = "Radio";



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1 = (Button) findViewById(R.id.button1);
    editText1 = (EditText) findViewById(R.id.editText1);
    editText2 = (EditText) findViewById(R.id.editText2);

    View.OnClickListener myOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            double pNumber = Double.parseDouble(editText1.getText().toString());
            if(pNumber == a){
                editText2.setText(b);
            }
           else if (pNumber == c){
                editText2.setText(d);
            }
            else
                editText2.setText("Invalid Product Number");
            }


    };

    button1.setOnClickListener(myOnClickListener);

【问题讨论】:

  • 您可以简单地停用Button,并仅在TextField 中输入一些文本时激活它。

标签: java android exception if-statement


【解决方案1】:

除了 Spartas Answer 之外,检查有效的 Double 输入也是一个好主意:

try {
    double pNumber = Double.parseDouble(text);
catch(NumberFormatException e){
    //Do ExceptionHandling
}

【讨论】:

  • 什么情况下不会是double?用户只能输入数字,不能输入字母或小数点。
  • 通常也可以在edittext输入中输入非数值。使用您提供给我们的代码,也可以输入非数值。如果您在 xml 文件中进行了任何其他限制或仅向用户显示数字键盘,则可能不需要检查。但它永远不会伤害:)
【解决方案2】:

使用这个:

View.OnClickListener myOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String text = editText1.getText().toString();

        if(!TextUtils.isEmpty(text)) {
            // EditText1 is not empty
            try {
                double pNumber = Double.parseDouble(text);
                if(pNumber == a)
                    editText2.setText(b);
                else if (pNumber == c){
                    editText2.setText(d);
                else
                    editText2.setText("Invalid Product Number");
            }
            catch(NumberFormatException e) { 
                // Invalid input, not a double
                editText2.setText("Invalid double input"); 
            }
        }
        else {
            // EditText1 is empty
            editText2.setText("EditText1 is empty"); 
        }
    }
};

【讨论】:

  • 工作就像一个魅力,愿上帝保佑你
【解决方案3】:

基本上有两种方法可以处理这个问题

1) 使用try-catch

try{
 double pNumber = Double.parseDouble(editText1.getText().toString());
  }catch(NumberFormatException e){
    //show a message to user 

  }

2) 使用输入卫生

  String number = editText1.getText().toString();
  boolean isNumber = number.matches("^-?\\d+$"));//haven't tried this though
  if(!isNumber) //if not number
    //show a message to user

【讨论】:

  • 不会是变量 number 总是不是 Number 的 instanceof,因为您已将其声明为 String?由于 String 仅继承自 Object 而 Number 也仅继承自 Object
猜你喜欢
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2014-02-15
  • 2014-10-24
  • 2012-12-31
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多