【问题标题】:User Input of int won't be nullint 的用户输入不会为空
【发布时间】:2019-05-22 11:12:23
【问题描述】:

我编写了一个代码,用户将值放在某个范围之间,我的代码为它们生成随机数。随机化工作正常,但当字段为空白时,我的应用程序崩溃了我应该如何修复它。

randNum.java

Button generateNum = findViewById(R.id.generate_number);

generateNum.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        EditText et = findViewById(R.id.fromNum);
        String sTextFromET = et.getText().toString();
        int fNum = Integer.valueOf(sTextFromET);


        EditText et1 = findViewById(R.id.toNum);
        String sTextFromET1 = et1.getText().toString();
        int sNum = Integer.valueOf(sTextFromET1);

        TextView ans = findViewById(R.id.ans);

        //                if(sNum == null || fNum == null){
            //
            //                    ans.setText(getString(R.string.enterNumError));
            //
            //                }
        //                else
        if(sNum < fNum){

            ans.setText(getString(R.string.max_min_error));

        }else {

            final int random = new Random().nextInt((sNum - fNum) + 1) + fNum;
            String ras = Integer.toString(random);
            ans.setText(ras);

        }

    }
});

我尝试使用null,但它不起作用。

【问题讨论】:

    标签: android validation android-studio input


    【解决方案1】:

    您需要首先在按钮单击时进行验证。 (用于检查用户是否在任何编辑文本中没有输入任何内容或仅输入空格)。

        btnSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                strNum1 = edtl.getText().toString().trim();
                strNum2 = edt2.getText().toString().trim();
    
                if (strNum1.length() == 0)
                {
                    showAlert("Please enter Num 1");
                }
                else if (strNum2.length() == 0)
                {
                    showAlert("Please enter Num 2");
                }
                else
                {
                    int numvalue1 = Integer.parseInt(strNum1);
                    int numvalue2 = Integer.parseInt(strNum2);
                    generateNum (numvalue1, numvalue2);  //Call your function for generation of random number here
                    //do your stuff here
                }
            }
        });
    

    希望这可以帮助您了解空输入字段的表单验证。

    P.S:如果您尚未在 xml 文件中添加 inputType 属性,我建议您为 EditTexts 添加它:

    android:inputType="number"
    

    因此,如果用户输入任何字母或符号,您可以避免Integer.parseInt 出现异常。

    【讨论】:

    • 我已经添加了 android:inputType="number",我现在按照你的建议更改我的代码 .lenghth() 没有解决错误发生
    • 用新代码更新你的问题,让我看看。
    • IMO TextUtils.isEmpty(strNum1).length() 处理这种情况的方法要好得多。是的,使用android:inputType="number" 是个好主意,因为它可以防止用户在文本输入中输入非数字值。
    【解决方案2】:

    您需要处理 Integer.valueOf() 函数抛出的 NumberFormatException

    try {
          EditText et = findViewById(R.id.fromNum);
          String sTextFromET = et.getText().toString();
          int fNum = Integer.valueOf(sTextFromET);
    
    
          EditText et1 = findViewById(R.id.toNum);
          String sTextFromET1 = et1.getText().toString();
          int sNum = Integer.valueOf(sTextFromET1);
    
          TextView ans = findViewById(R.id.ans);
    
          if(sNum < fNum){
              ans.setText(getString(R.string.max_min_error));
          }else {
              final int random = new Random().nextInt((sNum - fNum) + 1) + fNum;
              String ras = Integer.toString(random);
              ans.setText(ras);
          }
    }catch(NumberFormatException e){
        Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show();
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 2013-04-14
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2013-03-09
      • 1970-01-01
      相关资源
      最近更新 更多