NumberFormatException с IntEditTextPreference

111
17

В моем приложении для Android я использую класс под названием "IntEditTextPreference". Этот класс используется, когда я хочу, чтобы пользователь вводил предпочтение как целое число.

Но это проблема. Когда пользователь покидает поле пустым и нажимает "ok", генерируется исключение NumberFormatException.

Что я могу сделать, чтобы пользователь не нажимал "ok", когда поле пусто?

Благодарю!

public class IntEditTextPreference extends EditTextPreference
{

public IntEditTextPreference(Context context)
{
super(context);
}

public IntEditTextPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
}

public IntEditTextPreference(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}

@Override
protected String getPersistedString(String defaultReturnValue)
{
return String.valueOf(getPersistedInt(-1));
}

@Override
protected boolean persistString(String value)
{
return persistInt(Integer.valueOf(value));
}

}

спросил(а) 2021-01-19T13:59:11+03:00 6 месяцев, 1 неделя назад
1
Решение
64

Вероятно, у вас должен быть блок try/catch, чтобы поймать NumberFormatException. Но есть много способов сделать это. Один из способов - вы можете использовать кнопки setClickable method для false а затем true, когда текст не является нулевым и является целым, используя onTextChangedListener. Или вы могли бы просто позволить ему быть кликабельным, но проверять пустую строку или не целое число при нажатии кнопки и использовать предупреждающее сообщение toast/alert/label, чтобы пользователь знал, что у него неправильное поле, прежде чем разрешить кнопке делать что-либо еще. Надеюсь это поможет!

ответил(а) 2021-01-19T13:59:11+03:00 6 месяцев, 1 неделя назад
46

В общем случае, если вы используете приложение на основе браузера, вы должны использовать JavaScript/AJAX для отображения кнопки, когда вход действителен. Это уже обрабатывается на стороне клиента. Чтобы избежать исключения NumberFormatException, просто добавьте try catch -block в Integer.valueOf(value).

В основном это зависит от вашей клиентской базы. Там могут быть лучшие решения, ориентированные на конкретную инфраструктуру. Какой из них вы используете?

ответил(а) 2021-01-19T13:59:11+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема