Integer.parseInt()方法以空字符串作为参数而崩溃

时间:2019-03-21 06:50:37

标签: java android

https://youtu.be/LsKjw-IJQpI大家好,我有一个问题,我正在关注一个教程,当我按下按钮,当它为空edittext时,我遇到了一个问题,我的应用程序说停止了,我想知道如何解决它? >

this is the code



 buttonalarm = (Button) findViewById(R.id.buttonalarm);
    buttonalarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int hour = Integer.parseInt(houredit.getText().toString());
            int minute = Integer.parseInt(minuteedit.getText().toString());
            Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM);
            intent.putExtra(AlarmClock.EXTRA_HOUR, hour);
            intent.putExtra(AlarmClock.EXTRA_MINUTES, minute);

            if (hour <= 24 && minute <= 60) {
                startActivity(intent);

            }
        }
    });

和我的logcat

   java.lang.NumberFormatException: Invalid int: ""
        at java.lang.Integer.invalidInt(Integer.java:138)
        at java.lang.Integer.parseInt(Integer.java:358)
        at java.lang.Integer.parseInt(Integer.java:334)
        at com.koko.myapp.alarma$2.onClick(alarma.java:72)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

3 个答案:

答案 0 :(得分:2)

此行抛出NumberFormatException

Integer.parseInt(houredit.getText().toString());

因为houredit.getText().toString()返回一个空字符串,并且您无法将空字符串解析为Integer。

在解析之前,请检查houredit.getText().toString()是否不返回空字符串。

答案 1 :(得分:0)

Integer.parseInt方法将字符串参数解析为带符号的十进制整数。尝试使用一些整数值初始化您的EditText,例如0。

答案 2 :(得分:0)

我知道这是一个老问题,但目前的答案似乎没有多个答案或解决方法的示例。你得到这个的原因是因为它得到一个 NumberFormatException 并且因为字符串是空的它不能解析它并崩溃,所以有两种方法可以修复它。

第一种方法是检查字符串是否为空,如果不是,则继续解析数据。

if (!houredit.getText().toString().trim().equals("")){
 int hour = Integer.parseInt(houredit.getText().toString());
 int minute = Integer.parseInt(minuteedit.getText().toString());
 Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM);
 intent.putExtra(AlarmClock.EXTRA_HOUR, hour);
 intent.putExtra(AlarmClock.EXTRA_MINUTES, minute);

 if (hour <= 24 && minute <= 60) {
   startActivity(intent);
 }
}

第二种方法是使用 try/catch,它告诉应用程序尝试某些操作,如果无法执行,则抛出错误。

try{
 int hour = Integer.parseInt(houredit.getText().toString());
 int minute = Integer.parseInt(minuteedit.getText().toString());
 Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM);
 intent.putExtra(AlarmClock.EXTRA_HOUR, hour);
 intent.putExtra(AlarmClock.EXTRA_MINUTES, minute);

 if (hour <= 24 && minute <= 60) {
   startActivity(intent);
 }
}catch(Exception ignored){} // <- capture exception if you need, else you can ignore it