Проверьте, не является ли текст редактирования, который принимает только число, пустым и равен или меньше 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, часто компилятор запутывается там.

Надеюсь это поможет:)

Другие вопросы по тегам