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
相关产品推荐
相关产品推荐

