EditText 到整数 (Android)

EditText to Integer (Android)

我正在尝试将 xml 中数字类型的 EditText 转换为整数,以便以秒为单位计算值。

    hoursIn = (EditText) findViewById(R.id.hoursET);
    minIn = (EditText) findViewById(R.id.minET);
    start = (Button) findViewById(R.id.startButton);
    stop = (Button) findViewById(R.id.stopButton);
    textViewTime = (TextView) findViewById(R.id.timeDisp);

    inHr = Integer.parseInt(hoursIn.getText().toString());
    inMin = Integer.parseInt(minIn.getText().toString());

    hoursMs = hrsToMs(inHr);
    minMs = minToMs(inMin);
    totalTime = hoursMs + minMs;

当我评论初始化 inHr 和 inMin 的行时,我在运行时没有收到任何错误,但是当我保留上面的代码时,我收到以下错误:

java.lang.RuntimeException:无法启动 activity ComponentInfo{dit.assignment3/dit.assignment3.Timer}:java.lang.NumberFormatException:无效 int:“”

我也尝试过此操作,但从同一行代码开始出现相同的错误:

    final CounterClass timer = new CounterClass(totalTime, 1000);
    start.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (hoursIn != null)
            {
                inHr = Integer.parseInt(hoursIn.getText().toString());
                hoursMs = hrsToMs(inHr);

            }
            if (minIn != null)
            {
                inMin = Integer.parseInt(minIn.getText().toString());
                minMs = minToMs(inMin);
            }
            else
            {
                textViewTime.setText("PLEASE GIVE A TIME");
            }
            totalTime = hoursMs + minMs;
            timer.start();
        }
    });

提前致谢:)

每当您尝试将空字符串解析为整数时,您将得到一个 java.lang.NumberFormatException: Invalid int: ""。因此需要检查EditText是否为空

你可以很容易地做到这一点

if (hoursIn.getText().toString().matches("")) {
    Toast.makeText(this, "You did not enter a text", Toast.LENGTH_SHORT).show();
    return;
}

你可以简单地做如下检查

if (hoursIn.getText().toString().equals("")) {
    Toast.makeText(this, "You did not enter a text", Toast.LENGTH_SHORT).show();
    return;
}

我确定此代码块与您在此处显示的完全相同。这意味着您正在直接初始化 EditText 并立即调用 getText() 导致 Exception.

的方法

初始化后不会立即有任何值,因此当调用 Integer.parseInt 为空值时您会得到 NumberFormatException

所以我建议你把这些代码放在像这里的 buttonClicked 这样的事件中,这样你就可以确定你已经输入了一些文本。最好也检查 empty

public void buttonClicked(View v){
    inHr = Integer.parseInt(hoursIn.getText().toString());
    inMin = Integer.parseInt(minIn.getText().toString());
}

首先,您必须将要从 edittext 读取的行放在某些事件(例如单击按钮)中。然后检查edittext中是否输入了任何内容,然后使用try/catch子句将其转换为数字。

试试这个代码。
将按钮添加到您的 activity xml 文件:

   <Button 
   android:height="wrap_content"
   android:width="wrap_content"
   android:onClick="myClickHandler" />



    hoursIn = (EditText) findViewById(R.id.hoursET);
    minIn = (EditText) findViewById(R.id.minET);
    start = (Button) findViewById(R.id.startButton);
    stop = (Button) findViewById(R.id.stopButton);
    textViewTime = (TextView) findViewById(R.id.timeDisp);

    public void myClickHandler(View v){
     if (hoursIn.getText().toString().matches("") ||  minIn.getText().toString().matches("")){
        Toast.makeText(this, "You did not enter a text",Toast.LENGTH_SHORT).show();
        return;
     } else {
          try {
            inHr = Integer.parseInt(hoursIn.getText().toString());
            inMin = Integer.parseInt(minIn.getText().toString());
            hoursMs = hrsToMs(inHr);
            minMs = minToMs(inMin);
            totalTime = hoursMs + minMs;
            Log.i("success");
          } catch (NumberFormatException e) {
            Toast.makeText(this, "Please enter number only",Toast.LENGTH_SHORT).show();
            return;
         }
      }        
    }