簡體   English   中英

空的 EditText 崩潰 Android

[英]Empty EditText crash 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);
}

問題是您正在將 et1.getText() 轉換為 String,如果返回空值,則會引發空指針異常。 所以需要檢查值是否為空:

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);
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM