Проверьте, не является ли текст редактирования, который принимает только число, пустым и равен или меньше 100
Я создаю приложение для получения оценок и хочу убедиться, что тексты редактирования не пусты, а значения меньше или равны 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$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(собственный метод) в 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 at 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(собственный метод) на java.lang.reflect.Method. вызвать (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: недопустимый тип 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) в android.view.View$1.onClick(View.java:3822) в android.view.View.performClick (Просмотреть. 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. refle.Method.invoke (Method.java:515) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) на com.android.internal.os.ZygoteInit.m ain (ZygoteInit.java:606) в dalvik.system.NativeStart.main(собственный метод)
5 ответов
В вашем xml, где вы объявили edittext, убедитесь, что вы поместили следующий атрибут в элемент edittext
android:inputType="number"
И измените приведенный выше код на это:
if(editText.getText().toString().trim().isEmpty() || Integer.parseInt(editText.gettext().toString()) > 100 )
{
//Error message for example
}
сначала нужно проверить, если текст не пустой
Сначала вы вводите свой XML Тип ввода EditText = число
Затем напишите этот код
If(edittext.getString().toString().Trim().lenght()>0)
{
If(Integer.parseInt(editText.gettext().toString()) <= 100 )
{
}
}
Если вы хотите контролировать, какую цифру следует ввести, используйте android:digits=""
android:inputType="number"
Принудительно открывать клавиатуру с числовым типом, но пользователь может нажимать другой символ, например " #, ", чем может вызвать NumberFormatException
<EditText
android:inputType="number"
android:digits="0123456789"
/>
android: digits = "0123456789" принимает только 0123456789 в EditText
, а не любой другой символ
Перед преобразованием любого строкового целого числа вы должны убедиться, что оно пустое.
String strNumber=editText.getText().toString().trim();
if(TextUtils.isEmpty(strNumber) || Integer.parseInt(strNumber)>100){
// show your error message
}
Вам нужно только переключить 2-е и 1-е выражения оператора if. Потому что, когда программа запускается, она проверяет сначала 1-е выражение, а затем 2-е.
Итак... когда у вас нет никакого значения в editText, getText(). ToString() возвращает это "", и невозможно проанализировать Int это значение, так что вы должны проверить сначала length(), а затем проверить если число больше 100
if(editText.getText().toString().trim().isEmpty() || Integer.parseInt(editText.gettext().toString()) > 100 )
{
//Error message for example
}
Ваш logcat утверждает, что вы вводите строку, где для кода требуется целое число.
Вызывается: java.lang.NumberFormatException:
Я хотел бы предложить сохранить значение EditText в другой строке и затем проверить его тип в Integer, часто компилятор запутывается там.
Надеюсь это поможет:)