1

入力を検証したい場合、入力された値が9から50の間であれば、入力テキストは有効です(トースト)。私が直面しています 問題は、私はいくつかの整数を入力したときであると明確よりも/何にテキストフィールドを消去し、アプリがクラッシュ..ここ メインアクティビティコード:edittextフィールドへの入力の即時検証チェック(整数型)

v1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       /* int var1,var2; 
       var1=Integer.parseInt(v1.getText().toString()); 
       var2=Integer.parseInt(v2.getText().toString()); 

       if (var1<9 && var2>50){ 
        Toast.makeText(MainActivity.this,"invalid input ",Toast.LENGTH_SHORT).show(); 
       }*/ 
      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
/* 

       int var1,var2; 
       var1=Integer.parseInt(v1.getText().toString()); 
       var2=Integer.parseInt(v2.getText().toString()); 
*/ 
//    String var1=v1.getText().toString(); 




       /* String inpt=""; 
       *//*for (int i = start;i<=before;i++){ 

        inpt= s + inpt; 

       } 

*//* 
//    for(String reslt:s.length()) 
       var1=Integer.parseInt(inpt); 
*/ 


    int var1=0; 

    var1 = Integer.parseInt(s.toString()); 


    if (var1 < 9 || var1 > 50) { 
     Toast.makeText(MainActivity.this, "invalid input ", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(MainActivity.this, "Valid ", Toast.LENGTH_SHORT).show(); 

    } 
} 


      @Override 
      public void afterTextChanged(Editable s) { 



      } 
     }); 

クラッシュログがようである:

11-07 16:11:49.521 27518-27518/com.example.mts3_.p1_d3_app_bar E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.mts3_.p1_d3_app_bar, PID: 27518 
                      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 com.example.mts3_.p1_d3_app_bar.MainActivity$1.onTextChanged(MainActivity.java:82) 
                       at android.widget.TextView.sendOnTextChanged(TextView.java:7894) 
                       at android.widget.TextView.handleTextChanged(TextView.java:7954) 
                       at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9776) 
                       at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:964) 
                       at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:515) 
                       at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:216) 
                       at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:33) 
                       at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:94) 
                       at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:49) 
                       at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:155) 
                       at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:138) 
                       at android.widget.TextView.doKeyDown(TextView.java:5930) 
                       at android.widget.TextView.onKeyDown(TextView.java:5743) 
                       at android.view.KeyEvent.dispatch(KeyEvent.java:2651) 
                       at android.view.View.dispatchKeyEvent(View.java:8412) 
                       at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1496) 
                       at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1496) 
                       at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1496) 
                       at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1496) 
                       at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1496) 
                       at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1496) 
                       at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1496) 
                       at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2432) 
                       at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1738) 
                       at android.app.Activity.dispatchKeyEvent(Activity.java:2757) 
                       at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534) 
                       at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58) 
                       at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:316) 
                       at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58) 
                       at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2321) 
                       at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4273) 
                       at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4227) 
                       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3767) 
                       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3830) 
                       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3786) 
                       at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3913) 
                       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3794) 
                       at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3970) 
                       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3767) 
                       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3830) 
                       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3786) 
                       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3794) 
                       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3767) 
                       at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6165) 
                       at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6139) 
                       at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6110) 
                       at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3533) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Loope 

11-07 16:11:49.551 27518-27518/com.example.mts3_.p1_d3_app_bar V/Process:killProcess [27518]呼び出し側= com.android.internal.os.RuntimeInit $ UncaughtHandler.uncaughtException:99 java.lang .ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690 11-07 16:11:49.551 27518-27518/com.example.mt s3_.p1_d3_app_bar I/Process:シグナルを送信しています。 PID:27518 SIG:9

+0

ので、カスタム入力フィルタは、今のところかなり重いだろう..私は初心者だここ –

答えて

1

あなたの問題

java.lang.NumberFormatExceptionです:無効INT: ""

Stringintに変換すると、Stringがnullかどうかがわかります。

あなたのコードでTextUtils.isEmpty(s.toString()) ? 0 : s.toString()を使用

s.toString()がnullの場合、それは 0が.IT NumberFormatExceptionが発生することはありませんが返されます.AND s.toString()がnullでない場合、それは正常な戻ります。

s.toStringはnullであると判断する必要があります。

コードにvar1 = Integer.parseInt(TextUtils.isEmpty(s.toString()) ? 0 : s.toString());を使用してください。

var1 = Integer.parseInt(TextUtils.isEmpty(s.toString()) ? 0 : s.toString()); 
if (var1 < 9 || var1 > 50) { 
    Toast.makeText(MainActivity.this, "invalid input ", Toast.LENGTH_SHORT).show(); 
} else { 
    Toast.makeText(MainActivity.this, "Valid ", Toast.LENGTH_SHORT).show(); 
} 
0

Integer.parseInt()コードを呼び出すと、String変数がIntegerに変換され、EditTextの文字列は有効ではありません。 Integer.parseInt()を呼び出す前に入力文字列が ""等しくないかどうかを確認する必要があります。

BTW。より良い練習は、カスタム入力フィルタを書いている、それは9の範囲内の数字のみを使用することができます - 50

+0

をあなたのクラッシュログを追加し、私はそれを通過します。 –

0

onTextChanged(オーバーライドメソッド)では、フィールドが空であるかどうかを確認するために必要なチェックが必要でした。 動作するコードは以下の通りです:

if(s.length()>0) { 


      int var1 = 0; 

      var1 = Integer.parseInt(s.toString()); 


      if (var1 < 9 || var1 > 50) { 
       Toast.makeText(MainActivity.this, "invalid input ", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(MainActivity.this, "Valid ", Toast.LENGTH_SHORT).show(); 

      } 
     }else {Toast.makeText(MainActivity.this, "FIELD EMPTY ", Toast.LENGTH_SHORT).show();}