Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 空文本崩溃_Java_Android - Fatal编程技术网

Java 空文本崩溃

Java 空文本崩溃,java,android,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 + "=" + "?

我刚开始学习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);
}

问题是,您正在将et1.getText()转换为字符串,如果返回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);
}
另一件事是,若字符串是空的,那个么它将无法解析为int,所以您还需要对此进行检查

或者

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


您可以检查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
}

您遇到了什么异常?在尝试
answer=Integer.parseInt(answer1)
之前,请检查字符串是否为空。要检查字符串是否为空,请使用
TextUtils.isEmpty(answer1)
NumberFormatException-如果字符串不包含可解析的int.
I betIt可以是任何内容,则必须使用android studio logger并发布实际堆栈跟踪。你的问题毫无意义,它可以是任何东西。提供更多细节
if (!et1.getText().toString().equals(""))
{
    answer1 = et1.getText().toString();
}
else
{
    //No value entered
}