我试图创建一个猜数字游戏,我设置了一个数字范围,并编辑用户输入数字的文本。我试图输入,例如“50”,但当我试图删除时,我只能删除“0”。如果我一直删除数字“5 ”,应用程序就会崩溃。以下是我的主要活动代码:
import java.util.Random;
public class MainActivity extends AppCompatActivity {
TextView textViewChoice, textViewStatus;
EditText editTextNum ;
Button buttonSetting;
SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewChoice = (TextView) findViewById(R.id.textViewChoice);
textViewStatus =(TextView) findViewById(R.id.textviewStatus);
editTextNum = (EditText) findViewById(R.id.edittextGuess);
buttonSetting =(Button) findViewById(R.id.buttonSetting);
preferences = getSharedPreferences("LIMITS",MODE_PRIVATE);
buttonSetting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondaryActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onStart() {
super.onStart();
final int MinNumber = preferences.getInt("Seekbar Min", 0);
final int MaxNumber = preferences.getInt("Seekbar Max", 0);
textViewChoice.setText("" + MinNumber + "-" + MaxNumber);
editTextNum.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
Random random = new Random();
int RanNum = random.nextInt(MaxNumber-MinNumber)+MinNumber;
String StringEditNum= editTextNum.getText().toString();
int EditNum = Integer.parseInt(StringEditNum);
if (EditNum >RanNum){
textViewStatus.setText("Enter Higher Number");
}
else if(EditNum <RanNum){
textViewStatus.setText("Enter Lower Numer!");
}
else if (StringEditNum.equals("")){
Toast.makeText(MainActivity.this,"Error!",Toast.LENGTH_SHORT).show();
}
else {
textViewStatus.setText("You won! You Nutz!");
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
调试后,我得到了这个:
E/AndroidRuntime:致命异常:主进程:com.example.user.ggame,PID:3291 java.lang.NumberFormatException:对于输入字符串:“”,位于android.widget.TextView.sendOnTextChanged(TextView.java:9359),位于com.example.user.ggame.MainActivity$2.onTextChangedandroid.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:11904)位于android.text.SpanableStringBuilder.sendTextChanged(SpanableStringBuilder.java:1252)位于androde.text.SspanableStringBuildr.replace(Spanable StringBuilder.java:573)位于android.text.spanableStringBuilder.delete位于android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:370),位于android.text.method.FaseKeyListenerbackspace(BaseKeylister.java:71),位于android.text.maethod.Base KeyListener.onKeyDown(BaseKey侦听器java:479)android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1827)android.vview.ViewGroup.DispatchKey事件位于android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1827)位于android.wiew.ViewGroup.dispatchKeyEvent(ViewGroup.java:1827android.support.v7.app.AppCompatActivity.dispatchKeyEvent(Activity.java:3252)位于android.ssupport.v7.view.WindowCallbackWrapper.dispatchKeyEvent位于android.view.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4714),位于android.wiew.view.RiewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4586(ViewRootImpl.java:4181)在android.view.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147)在andry.view.view.VViewRootImpl$CAsyncInputStage.forward(ViewRootImpl.java:4274)在andrio.view.VViewrootImpl$Input Stage.apply(ViewRootImpl.java:4155)在andro.view.view.WiewRootImpl$AsyncInputStage.applyandroid.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181),位于android.vview.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147),位于android.view.view.VViewRootImpl$1InputStage.apply(ViewRootImpl.java:4155),位于android.view.VookRootImpl[InputStage.delivery(ViewRootEmbl.java:4128),位于android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147),位于android.vview.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java=4307),位于android.view.Wiew.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4468),位于android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1998)E/AndroidRuntime:位于android.vview.inputmethod.InputMethodManager/finishedInputEvent(InputMethodManager/java:1989)位于android.wiew.inputmethod.InputEventSender.dispatchInputEventFinished(InputMethodManagement.java:2412)(InputEventSender.java:141),位于android.os.MessageQueue.nativePollOnce(本机方法),位于android.os.Message Queue.next(MessageQueue.java:325),位于android.os.Looper.lop(Looper.java:142),位于Android.app.ActivityThread.main(ActivityThread.java:6541),位于com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240),位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
您的问题在此行中:
String StringEditNum= editTextNum.getText().toString();
int EditNum = Integer.parseInt(StringEditNum);
清除 5
时,StringEditNum
的值将是空字符串,您无法解析 Int 空字符串,因此它崩溃了
尝试添加这个:
String StringEditNum= editTextNum.getText().toString();
int EditNum = 0;
if(!StringEditNum.equals("")){
EditNum = Integer.parseInt(StringEditNum);
}
尝试以下代码
Random random = new Random();
int RanNum = random.nextInt(MaxNumber-MinNumber)+MinNumber;
String StringEditNum= editTextNum.getText().toString();
if(!StringEditNum.equals("")){
int EditNum = Integer.parseInt(StringEditNum);
if (EditNum >RanNum){
textViewStatus.setText("Enter Higher Number");
}else if(EditNum <RanNum){
textViewStatus.setText("Enter Lower Numer!");
}else {
textViewStatus.setText("You won! You Nutz!");
}
} else{
Toast.makeText(MainActivity.this,"Try again!",Toast.LENGTH_SHORT).show();
}
检查下面的代码。
editTextNum.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(editTextNum.getText().toString().length() > 0)
{
Random random = new Random();
int RanNum = random.nextInt(MaxNumber-MinNumber)+MinNumber;
String StringEditNum= editTextNum.getText().toString();
int EditNum = Integer.parseInt(StringEditNum);
if (EditNum >RanNum){
textViewStatus.setText("Enter Higher Number");
}
else if(EditNum <RanNum){
textViewStatus.setText("Enter Lower Numer!");
}
else if (StringEditNum.equals("")){
Toast.makeText(MainActivity.this,"Error!",Toast.LENGTH_SHORT).show();
}
else {
textViewStatus.setText("You won! You Nutz!");
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});