You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android数字猜谜App空EditText点击按钮崩溃问题解决咨询

解决EditText空输入导致的崩溃问题

嘿,我来帮你搞定这个问题!咱们先理清楚崩溃的根源:当EditText为空时,editTextGuess.getText().toString()会返回空字符串,这时候调用Integer.parseInt()就会抛出NumberFormatException,直接导致App崩溃。你之前尝试在全局变量赋值处加判断,那时候App刚启动,EditText本来就是空的,自然会触发错误——判断的时机完全错啦!

正确的做法是在点击按钮的guess方法里,先检查输入内容是否合法,再执行后续逻辑。下面是修改后的完整代码,我标了关键改动的地方:

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 {
    EditText editTextGuess;
    int RandomNumber;

    public void generateRandomNumber(){
        Random random = new Random();
        RandomNumber = random.nextInt(20) +1;
    }

    public void guess(View view){
        Log.i("Button clicked", "Worked!");
        
        // 关键改动1:先获取输入并去掉前后空格,判断是否为空
        String inputText = editTextGuess.getText().toString().trim();
        if(inputText.isEmpty()){
            // 空输入时弹出提示,直接返回不执行后续逻辑
            Toast.makeText(this, "Oops, your Textfield is empty", Toast.LENGTH_LONG).show();
            return;
        }
        
        int guessValue;
        try {
            // 关键改动2:用try-catch包裹解析,防止输入非数字的情况
            guessValue = Integer.parseInt(inputText);
        } catch (NumberFormatException e){
            Toast.makeText(this, "Please enter a valid number", Toast.LENGTH_LONG).show();
            return;
        }

        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 { // 简化逻辑:前面的条件覆盖了所有不相等的情况,剩下的就是相等
            message = "You were right! Let's play again!";
            generateRandomNumber();
            Log.i("Info", "New random number created");
        }

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

改动细节说明:

  • 空输入拦截:先调用trim()去掉输入前后的空格(防止用户只输入空格蒙混过关),如果为空就弹出提示并直接返回,避免走到解析数字的步骤。
  • 异常防护:用try-catch包裹Integer.parseInt(),就算用户输入字母、符号这类非数字内容,App也不会崩溃,而是友好提示输入有效数字。
  • 逻辑简化:最后一个分支不用再写else if(guessValue == RandomNumber),前面的>和<已经覆盖了所有不相等的情况,直接用else更简洁。

这样修改后,不管是空输入、空格输入还是非数字输入,App都能稳稳处理,再也不会崩溃啦!

内容的提问来源于stack exchange,提问作者Turwaith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:26:57