空的EditText崩溃Android

时间:2015-10-29 17:46:46

标签: java android

我刚刚开始学习Android,我制作了一个代码,给你一个方程式,你需要解决它,这很简单但是如果有人按下检查按钮并且编辑文本为空,那么应用程序崩溃了,我希望它能够计算这是错误..这是我的代码:

   public void Generate(View v) {
    x1=10+(int)((99-10+1)*Math.random());
    x2=10+(int)((99-10+1)*Math.random());
    tv1.setText("" + x1 + "+" + x2 + "=" + "?");
}

public void Check(View view) {
    answer1 = et1.getText().toString();
    answer = Integer.parseInt(answer1);
    if (answer == (x1 + x2)) {
        count1++;
        count2++;
        Toast.makeText(getApplicationContext(), "Correct !",
                Toast.LENGTH_SHORT).show();
    }


    if(answer!=(x1+x2))
    {
        count1++;
        count3++;
        Toast.makeText(getApplicationContext(), "Wrong !",
                Toast.LENGTH_SHORT).show();
    }

    if(answer1=="")
    {
        count1++;
        count3++;
        Toast.makeText(getApplicationContext(), "Don't try to cheat !",
                Toast.LENGTH_SHORT).show();
    }

    et1.setText("");
    tv2.setText("Number of questions : "+count1);
    tv3.setText("Right answers : "+count2);
    tv4.setText("Wrong answers : "+count3);

    Generate(view);
}

2 个答案:

答案 0 :(得分:0)

问题是您正在将et1.getText()转换为String,如果返回null值,则引发空指针异常。所以需要实现检查值是否为null:

if(et1.getText()!=null){

answer1 = et1.getText().toString();
if(et1.getText().toString().length()>0){
    answer = Integer.parseInt(answer1);
}
    if (answer == (x1 + x2)) {
        count1++;
        count2++;
        Toast.makeText(getApplicationContext(), "Correct !",
                Toast.LENGTH_SHORT).show();
    }


    if(answer!=(x1+x2))
    {
        count1++;
        count3++;
        Toast.makeText(getApplicationContext(), "Wrong !",
                Toast.LENGTH_SHORT).show();
    }

    if(answer1=="")
    {
        count1++;
        count3++;
        Toast.makeText(getApplicationContext(), "Don't try to cheat !",
                Toast.LENGTH_SHORT).show();
    }

    et1.setText("");
    tv2.setText("Number of questions : "+count1);
    tv3.setText("Right answers : "+count2);
    tv4.setText("Wrong answers : "+count3);

    Generate(view);
}

另一件事是,如果String为空,那么它将无法解析为int,因此您还需要检查

或者

if(et1.getText().toString().length()>0){
        answer = Integer.parseInt(answer1);
    }

if(!TextUtils.isEmpty(answer1)){
answer = Integer.parseInt(answer1);
}

答案 1 :(得分:0)

您可以检查EditText是否为空。在您的代码

中执行以下操作
if (!et1.getText().toString().matches(""))
{
    answer1 = et1.getText().toString();
}
else
{
    //No value entered
}

或者只是

if (!et1.getText().toString().equals(""))
{
    answer1 = et1.getText().toString();
}
else
{
    //No value entered
}