【问题标题】:app crashes when empty [closed]空时应用程序崩溃[关闭]
【发布时间】:2017-07-27 15:32:14
【问题描述】:

我最近开始学习 android studio,我制作了一个显示数字是三角形还是正方形的应用。问题是当用户没有在文本字段中输入任何内容时,我的应用程序就会崩溃!为什么会这样?我需要改变什么?

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    class Number {

        int number;

        public boolean isSquare() {

            double squareRoot = Math.sqrt(number);

            if (squareRoot == Math.floor(squareRoot)) {

                return true;

            } else {

                return false;

            }


        }

        public boolean isTriangular() {

            int x = 1;

            int y = 1;

            while (y < number) {

                x++;

                y = y + x;

            }

            if ( y == number ) {

                return true;

            } else {

                return false;

            }



        }


    }

    public void testNumber(View view) {

        String msg = "";

        EditText usersNumber = (EditText) findViewById(R.id.usersNumber);

        Number myNumber = new Number();

        myNumber.number = Integer.parseInt(usersNumber.getText().toString());


        if (usersNumber.getText().toString().isEmpty()) {


            msg = myNumber.number + "Please eneter a Number!";

        } else {


            if (myNumber.isSquare()) {

                if (myNumber.isTriangular()) {

                    msg = myNumber.number + "is both square and triangular!";
                } else {

                    msg = myNumber.number + "is square but not traingular";


                }


            } else {


                if (myNumber.isTriangular()) {

                    msg = myNumber.number + "is triangular but not suqare !";
                } else {

                    msg = myNumber.number + "is neither";
                }


            }




        }

        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();

    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

【问题讨论】:

  • 发布您的错误日志
  • 为什么要加ios标签?它不是 obj-c 或 swift 代码!!
  • 只是一个快速提示:将您的类 Number 放在它自己的 .java 文件中。没有理由把它放在你的Activity 类中。并检查parametrized constructor
  • 使用 android studio 2.2.3 顺便说一句

标签: java android


【解决方案1】:

如果用户没有在你的edittext文件中输入数字,usersNumber.getText().toString()会返回不能作为数字的空白。

这就是为什么您会在此声明中收到异常:Integer.parseInt(usersNumber.getText().toString());

请参阅here 了解更多详情。 要阻止您的应用程序崩溃,您可以在代码周围使用 try { ... } catch {...} 块:

try {
 myNumber.number = Integer.parseInt(usersNumber.getText().toString());


        if (usersNumber.getText().toString().isEmpty()) {


            msg = myNumber.number + "Please eneter a Number!";

        } else {


            if (myNumber.isSquare()) {

                if (myNumber.isTriangular()) {

                    msg = myNumber.number + "is both square and triangular!";
                } else {

                    msg = myNumber.number + "is square but not traingular";


                }


            } else {


                if (myNumber.isTriangular()) {

                    msg = myNumber.number + "is triangular but not suqare !";
                } else {

                    msg = myNumber.number + "is neither";
                }


            }




        }
}catch (NumberFormatException ne){
  //handle the exception
}

或在将其解析为整数之前简单地检查 null:

 if (!usersNumber.getText().toString().equals("")){
 myNumber.number = Integer.parseInt(usersNumber.getText().toString());
} else {
  myNumber.number = 0;
}

【讨论】:

  • 是的,感谢这终于奏效了!但是当用户什么都不输入时,它显示“0 请输入一个数字”我怎样才能将其更改为仅“请输入一个数字”
  • if (usersNumber.getText().toString().isEmpty()) { msg = "请输入一个数字!";
  • 功能齐全!我想要的方式感谢您的帮助;)这是我第一次使用这个网站!没想到这么快就得到正确答案:)
【解决方案2】:

将你想要的代码放入try catch语句中,这样应用程序在发生错误时不会崩溃。

try
{
  //Insert code here//
}
catch(Exception e)
{
  //Handle error here//
}

【讨论】:

  • 不要捕获超类异常。总是抓住它的具体子类
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多