簡體   English   中英

當 EditText 為空時,Java 簡單數字游戲應用程序崩潰

[英]Java Simple number game App crashes when EditText is empty

我制作了一個簡單的 Android 應用程序,該應用程序創建一個 1 到 20 之間的數字,用戶必須猜測它。 一切正常,除了一件事:當我讓EditText空時,當我按下按鈕時,應用程序會立即崩潰。 我怎樣才能防止這種情況? 我在EditText的輸入文本被賦予全局創建的editText變量editTextGuess嘗試了一個if-else參數,但是應用程序在啟動后立即崩潰。

我必須編寫什么代碼,應用程序不會因空文本字段而崩潰,而是會創建一個吐司說“哎呀,你的文本字段是空的”?

package com.example.randomness;

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;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

    //Den EditText und den Integer für die zufällige Zahl global erstellen
    EditText editTextGuess;
    int RandomNumber;

    //Hier einen Void eröffnen, um die zufällige Zahl zu erstellen
    public void generateRandomNumber(){
        Random random = new Random();

        RandomNumber = random.nextInt(20) +1;
    }

    //Erstellen der OnClick Methode für den Button, View view ist wichtig!
    public void guess(View view){
        Log.i("Button clicked", "Worked!");

        int guessValue;
        guessValue = Integer.parseInt(editTextGuess.getText().toString());
        Log.i("Entered Value:", Integer.toString(guessValue));
        Log.i("The random number is:", Integer.toString(RandomNumber));


        String message;

        if(guessValue > RandomNumber){
            message = "Your guessed number is too high!";
        } else if(guessValue < RandomNumber){
            message = "Your guessed number is too low!";
        } else if(guessValue == RandomNumber){
            message = "You were right! Let's play again!";
            generateRandomNumber();
            Log.i("Info", "New random number created");
        } else {
            message = "Something went wrong...";
        }

        Toast.makeText(this, message, Toast.LENGTH_LONG).show();

    }

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

        editTextGuess = findViewById(R.id.editTextRaten);
        generateRandomNumber();

    }
}

在嘗試使用EditText文本之前,請檢查它是否包含任何文本。 如果是,請閱讀文本,否則顯示toast

String text = editTextGuess.getText().toString().trim();

if(text.length == 0) {
  // show toast
} else {
  // use text from  editTextGuess
}

它崩潰是因為parseInt()在嘗試解析空字符串時拋出NumberFormatException

如果輸入字段為空,如何解決此問題取決於您想要什么。

String value = editTextGuess.getText().toString();
if (!value.isEmpty()) {
    guessValue = Integer.parseInt(value);
    ...
}
else {
    Toast.makeText(this, "Oops, input field is empty", ...);
}

在將其分配給變量之前檢查您的編輯文本字符串值。

public void guess(View view){
    Log.i("Button clicked", "Worked!");

    int guessValue;
    if(!editTextGuess.getText().toString().equals("")){
        guessValue = Integer.parseInt(editTextGuess.getText().toString());
        Log.i("Entered Value:", Integer.toString(guessValue));
        Log.i("The random number is:", Integer.toString(RandomNumber));


        String message;

        if(guessValue > RandomNumber){
            message = "Your guessed number is too high!";
        } else if(guessValue < RandomNumber){
            message = "Your guessed number is too low!";
        } else if(guessValue == RandomNumber){
            message = "You were right! Let's play again!";
            generateRandomNumber();
            Log.i("Info", "New random number created");
        } else {
            message = "Something went wrong...";
        }

        Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    }  else {
        Toast.makeText(this, "Oops, your Textfield is empty", Toast.LENGTH_LONG).show();
    }

}

正如@Yousaf 已經指出的問題, 這個答案將幫助您前進,但希望在未來添加一些注意事項以幫助更輕松地調試:始終嘗試創建多個語句,其中您正在取消引用對象,例如

guessValue = Integer.parseInt(editTextGuess.getText().toString());

可以寫成

String text=editTextGuess.getText().toString();
guessValue = Integer.parseInt(text);

它將幫助您了解失敗的確切原因。就像如果輸入的字符串不是數字,您可能會遇到NumberFormatException

暫無
暫無

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

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