我正在构建一个接收成绩的应用程序,我想确保编辑文本不为空,值小于或等于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.myapplicationE/AndroidRuntime: FATAL EXCEPTION: main过程:com.example.nima。myapplication, PID: 8649illegalstateexception:无法执行活动的方法在1.美元android.view.View 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(本地方法)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。主要(本地方法)原因:java.lang.reflect.InvocationTargetException在java.lang.reflect.Method。invokeNative(本地方法)java.lang.reflect.Method.invoke (Method.java: 515)在1.美元android.view.View 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(本地方法) 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。主要(本地方法)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(本地方法) java.lang.reflect.Method.invoke (Method.java: 515) 在1.美元android.view.View 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(本地方法) 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。主要(本地方法)
在您声明edittext的xml中确保您将以下属性放入edittext元素
android:inputType="number"
并将上面的代码更改为:
if(editText.getText().toString().trim().isEmpty() || Integer.parseInt(editText.gettext().toString()) > 100 )
{
//Error message for example
}
你首先需要检查文本是否为空
首先输入你的XML EditText Input Type=Number
然后写这段代码
If(edittext.getString().toString().Trim().lenght()>0)
{
If(Integer.parseInt(editText.gettext().toString()) <= 100 )
{
}
}
如果您想控制应该输入的数字,请使用android:digits=""
android:inputType="number"
强制打开数字型键盘,用户仍然可以按其他字符,如"#,"。
<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
}
您只需要切换if的第二个和第一个表达式。因为当程序运行时,它首先检查第一个表达式,然后检查第二个。
所以…当你在editText上没有任何值的时候getText()。tostring()返回这个"这个值不可能被解析为整型所以你必须先检查长度()然后检查数字是否大于100
if(editText.getText().toString().trim().isEmpty() || Integer.parseInt(editText.gettext().toString()) > 100 )
{
//Error message for example
}
您的logcat声明您正在输入一个字符串,而代码需要一个整数。
由:java.lang.NumberFormatException:
引起
我建议将EditText值存储在不同的字符串中,然后检查将其类型转换为Integer,很多时候编译器会在那里感到困惑。
希望这对你有帮助