【问题标题】:Check if an Edit Text that only accepts number is not empty and the number is equal or less than 100检查只接受数字的Edit Text是否不为空且数字等于或小于100
【发布时间】:2017-01-12 01:26:48
【问题描述】:

我正在构建一个接收成绩的应用程序,我想确保编辑文本不为空并且值小于或等于 100 我写了这一行,但它使应用程序崩溃

if(Integer.parseInt(editText.gettext().toString()) > 100 || editText.getText().toString().trim().length() == 0)
{
//Error message for example
} 

这是 logCat

09-04 18:21:06.331 8649-8649/com.example.nima.myapplication E/AndroidRuntime: FATAL EXCEPTION: main 进程:com.example.nima.myapplication,PID:8649 java.lang.IllegalStateException:无法执行活动的方法 在 android.view.View$1.onClick(View.java:3827) 在 android.view.View.performClick(View.java:4442) 在 android.view.View$PerformClick.run(View.java:18473) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5103) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 android.view.View$1.onClick(View.java:3822) 在 android.view.View.performClick(View.java:4442) 在 android.view.View$PerformClick.run(View.java:18473) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5103) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NumberFormatException: Invalid int: "" 在 java.lang.Integer.invalidInt(Integer.java:137) 在 java.lang.Integer.parseInt(Integer.java:358) 在 java.lang.Integer.parseInt(Integer.java:331) 在 com.example.nima.myapplication.MainActivity.me(MainActivity.java:22) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 android.view.View$1.onClick(View.java:3822) 在 android.view.View.performClick(View.java:4442) 在 android.view.View$PerformClick.run(View.java:18473) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5103) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606) 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android validation user-input is-empty range-checking


    【解决方案1】:

    在您声明edittext的xml中,确保您将以下属性放在edittext元素中

    android:inputType="number"
    

    并将上面的代码更改为:

     if(editText.getText().toString().trim().isEmpty() || Integer.parseInt(editText.gettext().toString()) > 100 )
        {
        //Error message for example
        } 
    

    你首先需要检查文本是否为空

    【讨论】:

      【解决方案2】:

      首先你输入你的 XML EditText Input Type=Number

      然后编写这段代码

      If(edittext.getString().toString().Trim().lenght()>0)
      {
           If(Integer.parseInt(editText.gettext().toString()) <= 100 )
           {
      
           }
      }
      

      【讨论】:

        【解决方案3】:

        如果你想控制应该输入什么数字,请使用android:digits=""

        android:inputType="number" 强制打开数字类型键盘仍然用户可以按“#,.”等其他字符,这可能会导致 NumberFormatException

        <EditText
            android:inputType="number"
            android:digits="0123456789"
        />
        

        android:digits="0123456789" 仅接受 EditText 中的 0123456789,不接受任何其他字符

        在转换任何字符串整数之前,您必须检查它是否为

        String strNumber=editText.getText().toString().trim();
         if(TextUtils.isEmpty(strNumber) || Integer.parseInt(strNumber)>100){
           // show your error message
        }
        

        【讨论】:

          【解决方案4】:

          您只需要切换 if 的第二个和第一个表达式。因为当程序运行时,它首先检查第一个表达式,然后检查第二个。

          所以...当您在 editText 上没有任何值时,getText().toString() 返回此“”,并且无法解析为 Int 该值,因此您必须首先检查 length() 和之后检查数字是否大于 100

          if(editText.getText().toString().trim().isEmpty() || Integer.parseInt(editText.gettext().toString()) > 100 )
          {
          //Error message for example
          } 
          

          【讨论】:

            【解决方案5】:

            您的 logcat 表明您正在输入一个字符串,其中代码需要一个整数。

            引起:java.lang.NumberFormatException:

            我建议将 EditText 值存储在不同的字符串中,然后检查类型转换为整数,很多时候编译器会在那里感到困惑。

            希望这会有所帮助:)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-05-27
              • 2023-01-30
              • 2022-08-05
              • 2012-03-16
              • 2017-02-13
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多