li:nth-of-type(3)
即使我有行
,当我按下应用程序上的“猜测”按钮时,我的应用程序崩溃了package com.davidcleary.numberguesser;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
int randomNumber;
Random randNum = new Random();
public void randomGenerator(View view) {
boolean isRight = false;
EditText guess = (EditText) findViewById(R.id.guessText);
String myGuess = guess.getText().toString();
int guessInt = new Integer(guess.getText().toString());
if (guess.getText().toString().equals("")) {
Toast.makeText(getApplicationContext(), "Please Enter A Guess!", Toast.LENGTH_SHORT).show();
} else if (guessInt == randomNumber) {
Toast.makeText(getApplicationContext(), "You Guessed The Right Number!!! " + "( " + guessInt + " )", Toast.LENGTH_LONG).show();
guess.setText("");
randomNumber = randNum.nextInt(21);
} else if (guessInt > randomNumber) {
Toast.makeText(getApplicationContext(), "Your Guess Is Too High! " + "( " + guessInt + " )", Toast.LENGTH_SHORT).show();
guess.setText("");
} else {
Toast.makeText(getApplicationContext(), "Your Guess Is Too Low! " + "( " + guessInt + " )", Toast.LENGTH_SHORT).show();
guess.setText("");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
randomNumber = randNum.nextInt(21);
}
}
尝试捕获空的EditText。
我查看了其他stackOverflow帖子但没有一个可以解决我的错误。
这是logcat:
if (guess.getText().toString().equals("")) {
Toast.makeText(getApplicationContext(), "Please Enter A Guess!", Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:3)
将int guessInt = new Integer(guess.getText().toString());
替换为
int guessInt;
try {
guessInt = Integer.parseInt(myGuess);
}
catch(NumberFormatException ex) {
//They didn't enter a number. Pop up a toast or warn them in some other way
return;
}
答案 1 :(得分:1)
您应该在此行之前检查空白字符串:
int guessInt = new Integer(guess.getText().toString());
向new Integer()
提供空字符串会导致您的应用崩溃。
只需将代码更改为:
if (guess.getText().toString().equals("")) {
Toast.makeText(getApplicationContext(), "Please Enter A Guess!", Toast.LENGTH_SHORT).show();
return;
}
int guessInt = new Integer(guess.getText().toString());
if (guessInt == randomNumber) {
尝试检测非数字值也是一种好习惯。您可以通过try / catch包围new Integer()
行来完成此操作。
例如:
int guessInt;
try{
guessInt = new Integer(guess.getText().toString());
} catch {
Toast.makeText(getApplicationContext(), "Please Enter A Valid Guess!", Toast.LENGTH_SHORT).show();
return;
}
答案 2 :(得分:0)
由于editText,您的应用程序崩溃。在这里,您尝试将editText的String值更改为int以便与随机数进行比较。
例如:
editText中的字符串值= [数字] ---转换为int-> [成功]
editText中的字符串值= [empty / null,alphabets] ---转换为int-> [错误]
因此,请尝试捕获[以下解决方案]
EditText guess = findViewById(R.id.guessText);
int guessValue;
try {
guessValue = Integer.parseInt(guess.getText().toString()); // best way to convert String into int
} catch (Exception e)
{
// Exception e for handle all type of Exceptions
Toast.makeText(getApplicationContext(),"Enter a Valid Number",Toast.LENGTH_LONG).show();
return;
}
这是您答案的解决方案。
我认为您正在制作Number Guess应用。您的代码太复杂了,您可以使它变得简单,小巧和高级(用户尝试猜测多少次)
此处为最佳做法的完整解决方案:(此处为最新支持的Androidx导入)
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
int randomNumber;
int guessLimit=20; // for set limit 1 to 20
int guessTry; // how many time user try
public void generateRandomNumber() {
Random rand = new Random();
randomNumber = rand.nextInt(guessLimit) + 1;
guessTry=0; // after Right Answer you Guess try will be zero
}
public void randomGenerator(View view) {
EditText editText = (EditText) findViewById(R.id.guessText);
int guessValue;
//Try-Catch for handle Error of ediText
try {
guessValue = Integer.parseInt(editText.getText().toString();); //convert editText value into int
}catch (Exception e)
{
Toast.makeText(getApplicationContext(),"Enter a Valid Number",Toast.LENGTH_LONG).show();
return;
}
if (guessValue>0 && guessValue <guessLimit+1) { //Check if entre number is bigger or lower then Guess Limit
if (guessValue > randomNumber) {
guessTry++; // increase guess try every time
Toast.makeText(getApplicationContext(),"Lower!" + " [Try=" + guessTry + "]" , Toast.LENGTH_SHORT).show();
} else if (guessValue < randomNumber) {
guessTry++;
Toast.makeText(getApplicationContext(),"Higher!" + " [Try=" + guessTry + "]" , Toast.LENGTH_SHORT).show();
} else {
guessTry++;
Toast.makeText(getApplicationContext(),"Hurry You Got it" + "[Ans=>"
+ randomNumber + "]" + " [Try=" + guessTry + "]" , Toast.LENGTH_SHORT).show();
generateRandomNumber(); //after Success , create new random number
}
} else { //if values are not between your provided guess limit
Toast.makeText(getApplicationContext(),"Entre Guess value between 1 to "+guessLimit,Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
generateRandomNumber(); // for call method of random number generater
}
}
谢谢!快乐编码:)