有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java应用程序在尝试从EditText解析整数时崩溃

我是编程新手,正在做一些小项目。然而,我被困在一个地方,我不知道如何解决这个问题

floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view)
        {
            String inter = editText1.getText().toString();
            String interT = editText2.getText().toString();
            String NAT = editText3.getText().toString();
            String skip = editText4.getText().toString();

            if (TextUtils.isEmpty(inter) && TextUtils.isEmpty(interT) && TextUtils.isEmpty(NAT))
            {
                editText1.setError("Please Fill The Field");
                editText2.setError("Please Fill The Field");
                editText3.setError("Please Fill The Field");
            }

            else
                {


                        int INTER = Integer.valueOf(editText1.getText().toString());
                        int INTER_T = Integer.valueOf(editText2.getText().toString());
                        int NATT = Integer.valueOf(editText3.getText().toString());
                        int SKIP = Integer.valueOf(editText4.getText().toString());

                        float result = (INTER / INTER_T) * 80 + (NATT / 100) * 20;

                        t.setText(String.valueOf(result));
                    }


        }
    });

以下是错误:

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 java.lang.Integer.valueOf(Integer.java:525)
at com.example.iubmeritcalculator.BS_ProgramActivity$1.onClick(BS_ProgramActivity.java:70)
at 安卓.view.View.performClick(View.java:5052)
at 安卓.view.View$PerformClick.run(View.java:20162)
at 安卓.os.Handler.handleCallback(Handler.java:739)
at 安卓.os.Handler.dispatchMessage(Handler.java:95)
at 安卓.os.Looper.loop(Looper.java:135)
at 安卓.app.ActivityThread.main(ActivityThread.java:5753)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

共 (2) 个答案

  1. # 1 楼答案

    在这种情况下,您必须检查skip“skip”的值是否为空。 应用程序崩溃,因为“inter”、“interT”和“NAT”值不为null,但当“skip”值为null时,您正在将空字符串转换为int

    if(TextUtils.isEmpty(inter) && TextUtils.isEmpty(interT) && TextUtils.isEmpty(NAT) && TextUtils.isEmpty(skip))
    

    所以我认为这会解决你的问题。 谢谢

  2. # 2 楼答案

    我认为这种情况是错误的。这三个条件都必须为真

    if (TextUtils.isEmpty(inter) && TextUtils.isEmpty(interT) && TextUtils.isEmpty(NAT))

    因此,如果其中一个是空的,它就会转到else分支,你的应用程序会因为其中一个是空的而崩溃

        if (!TextUtils.isEmpty(inter) && !TextUtils.isEmpty(interT) && !TextUtils.isEmpty(NAT)) {
            int INTER = Integer.valueOf(editText1.getText().toString());
            int INTER_T = Integer.valueOf(editText2.getText().toString());
            int NATT = Integer.valueOf(editText3.getText().toString());
            int SKIP = Integer.valueOf(editText4.getText().toString());
    
            float result = (INTER / INTER_T) * 80 + (NATT / 100) * 20;
    
            t.setText(String.valueOf(result));
        } else if (TextUtils.isEmpty(inter)) {
            editText1.setError("Please Fill The Field");
        } else if (TextUtils.isEmpty(interT)) {
            editText2.setError("Please Fill The Field");
        } else if (TextUtils.isEmpty(NAT)) {
            editText3.setError("Please Fill The Field");
        }