提问者:小点点

在Android Studio中清除EditText时应用程序崩溃


我试图创建一个猜数字游戏,我设置了一个数字范围,并编辑用户输入数字的文本。我试图输入,例如“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)


共3个答案

匿名用户

您的问题在此行中:

 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) {

    }
});