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);
}
}
当我按下应用程序上的“猜测”按钮时,我的应用程序崩溃了
if (guess.getText().toString().equals("")) {
Toast.makeText(getApplicationContext(), "Please Enter A Guess!", Toast.LENGTH_SHORT).show();
}
尝试捕获空的EditText。
我看过其他stackOverflow帖子,但没有一个可以解决我的错误。
这是logcat:
02-24 20:35:10.645 15999-15999/? I/art: Late-enabling -Xcheck:jni
02-24 20:35:10.683 15999-15999/com.davidcleary.numberguesser W/ResourceType: Found multiple library tables, ignoring...
02-24 20:35:10.784 15999-16028/com.davidcleary.numberguesser D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
02-24 20:35:10.790 15999-15999/com.davidcleary.numberguesser D/Atlas: Validating map...
02-24 20:35:10.849 15999-16028/com.davidcleary.numberguesser I/Adreno- EGL: <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.01.00.042.030_msm8974_LA.BF.1.1.1_RB1__ release_AU ()
OpenGL ES Shader Compiler Version: E031.25.03.06
Build Date: 07/13/15 Mon
Local Branch: mybranch11906725
Remote Branch: quic/LA.BF.1.1.1_rb1.26
Local Patches: NONE
Reconstruct Branch: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.01.00.042.030 + 6151be1 + a1e0343 + 002d7d6 + 7d0e3f7 + NOTHING
02-24 20:35:10.850 15999-16028/com.davidcleary.numberguesser I/OpenGLRenderer: Initialized EGL, version 1.4
02-24 20:35:10.866 15999-16028/com.davidcleary.numberguesser D/OpenGLRenderer: Enabling debug mode 0
02-24 20:35:10.937 15999-15999/com.davidcleary.numberguesser I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@23edbb88 time:9305943
02-24 20:35:14.498 15999-15999/com.davidcleary.numberguesser D/AndroidRuntime: Shutting down VM
02-24 20:35:14.501 15999-15999/com.davidcleary.numberguesser E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.davidcleary.numberguesser, PID: 15999
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClic k(AppCompatViewInflater.java:275)
at android.view.View.performClick(View.java:4856)
at android.view.View$PerformClick.run(View.java:19956)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5373)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
at android.view.View.performClick(View.java:4856)
at android.view.View$PerformClick.run(View.java:19956)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5373)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
Caused by: java.lang.NumberFormatException: Invalid int: ""
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:358)
at java.lang.Integer.parseInt(Integer.java:334)
at java.lang.Integer.<init>(Integer.java:102)
at com.davidcleary.numberguesser.MainActivity.randomGenerator(MainActivity.java:22)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
at android.view.View.performClick(View.java:4856)
at android.view.View$PerformClick.run(View.java:19956)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5373)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
最佳答案
将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;
}