EditText到整数(Android)

时间:2016-03-30 16:44:25

标签: java android parsing android-edittext countdowntimer

我正在尝试将EditText(xml中的number类型)转换为Integer,以便以秒为单位计算值。

    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:无法启动活动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();
        }
    });

提前致谢:)

3 个答案:

答案 0 :(得分:1)

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

初始化后不会立即显示任何值,以便在调用Exception为空值时获得NumberFormatException

因此,我建议您将这些代码放在像Integer.parseInt这样的事件中,这样您就可以确定已经输入了一些文本。并且最好还检查buttonClicked是否也是

empty

答案 1 :(得分:0)

每当您尝试将空字符串解析为Integer时,您将获得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;
}

答案 2 :(得分:0)

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

试试这段代码 在活动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;
         }
      }        
    }