单击按钮后,我的应用程序不断崩溃

时间:2019-02-07 16:01:55

标签: java android numberformatexception

我一直在自己编写应用程序,但是每次单击一个按钮时,它就会遇到一些问题(因为问题出在其OnCreate方法中)。我将其范围缩小到我认为是原因所在,并且似乎是以下一行:

int desitky_tom = Integer.parseInt(et_tom.getText().toString());

我想将et_tom变量从String收到的editText更改为int。这可能是原因吗?如果是,该如何更改应用程序不再崩溃?

这是我的Logcat错误日志:

2019-02-07 16:51:16.272 2794-2794/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mariaspocitadlo, PID: 2794
java.lang.NumberFormatException: For input string: ""
    at java.lang.Integer.parseInt(Integer.java:620)
    at java.lang.Integer.parseInt(Integer.java:643)
    at com.example.mariaspocitadlo.MainActivity$1.onClick(MainActivity.java:41)
    at android.view.View.performClick(View.java:6897)
    at android.widget.TextView.performClick(TextView.java:12693)
    at android.view.View$PerformClick.run(View.java:26101)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

这是其余的代码:

final Button spocitat = (Button) findViewById(R.id.button);
    spocitat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //editext Toma na desítky Toma
            EditText et_tom = (EditText)findViewById(R.id.editText);
            int desitky_tom = Integer.parseInt(et_tom.getText().toString());

            TextView txtview = (TextView)findViewById(R.id.textView_tom);
            String str = Double.toString(desitky_tom);
            txtview.setText(str);
            //editext Táty na desítky Táty
            EditText et_tat = (EditText)findViewById(R.id.editText2);
            int desitky_tat = Integer.parseInt(et_tat.getText().toString());
            //editext Kuby na desítky Kuby
            EditText et_kub = (EditText)findViewById(R.id.editText3);
            int desitky_kub = Integer.parseInt(et_kub.getText().toString());

            int desitky_vitez = 0;
            int body_tom = 0;
            int body_tat = 0;
            int body_kub = 0;
            int body_viteze = 0;

2 个答案:

答案 0 :(得分:0)

您需要将整数分析包含在try / catch块中,以避免NumberFormatException

例如:

int desitky_tat = 0;

try {
     desitky_tat = Integer.parseInt(et_tat.getText().toString());
} catch (NumberFormatException e) {
     //handle exception - if required
}

它崩溃的原因是因为您的EditText在按下按钮时可能具有空或非数字文本,从而导致应用崩溃。

答案 1 :(得分:0)

从LogCat判断,输入的字符串为""。 (LogCat中的第3行)。因此,它不是数字,不能转换为int。您应该确保输入一个数字,以防止崩溃以trycatch包围代码,例如:

try {
 EditText et_tom = (EditText)findViewById(R.id.editText);
 int desitky_tom = Integer.parseInt(et_tom.getText().toString());
} catch (Exception e) { System.out.println(e.toString()); }

除此之外,还要循环遍历输入,并确保输入的文本仅来自数字数组。