1

我正在构建一个接收成绩的应用程序,我想确保编辑文本不为空并且值小于或等于 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: 致命异常: 主进程: com.example.nima.myapplication, PID: 8649 java.lang.IllegalStateException: 无法执行方法android.view.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.Method.invokeNative(Native Method) 的 java.lang.reflect.Method.invoke(Method.java:515) 的 android.view 的 java.lang.reflect.InvocationTargetException。 View$1.onClick(View.java:3822) at android.view.View.performClick(View.java:4442) at android.view.View$PerformClick.run(View.java:18473) at android.os.Handler。 android.os.Looper.loop(Looper.java:136) 上 android.os.Handler.dispatchMessage(Handler.java:95) 上的 handleCallback(Handler.java:733)。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) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606) at dalvik.system.NativeStart.main(Native Method) 原因:java.lang。 NumberFormatException: Invalid int: "" at java.lang.Integer.invalidInt(Integer.java:137) at java.lang.Integer.parseInt(Integer.java:358) at java.lang.Integer.parseInt(Integer.java: 331) 在 com.example.nima.myapplication.MainActivity.me(MainActivity.java:22) 在 java.lang.reflect.Method。在 android.view.View$1.onClick(View.java:3822) 在 android.view.View.performClick(View.java) 的 java.lang.reflect.Method.invoke(Method.java:515) 的 invokeNative(Native Method) :4442) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 的 android.view.View$PerformClick.run(View.java:18473)在 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)

4

5 回答 5

1

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

android:inputType="number"

并将上面的代码更改为:

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

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

于 2016-09-04T14:09:46.490 回答
1

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

然后编写此代码

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

     }
}
于 2016-09-04T14:10:05.670 回答
1

如果要控制应输入的数字,请使用android:digits=""

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

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

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

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

String strNumber=editText.getText().toString().trim();
 if(TextUtils.isEmpty(strNumber) || Integer.parseInt(strNumber)>100){
   // show your error message
}
于 2016-09-04T14:37:22.053 回答
0

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

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

if(editText.getText().toString().trim().isEmpty() || Integer.parseInt(editText.gettext().toString()) > 100 )
{
//Error message for example
} 
于 2016-09-04T14:13:13.583 回答
-1

Your logcat states that you are entering a String where the code requires a Integer.

Caused by: java.lang.NumberFormatException:

What i would suggest is store the EditText value in a different String and then check typecast it into Integer, many a times the compiler gets confused there.

Hope this helps :)

于 2016-09-04T14:04:39.333 回答