невозможно проанализировать "" как целое число [FC] - PullRequest
0 голосов
/ 13 августа 2011

У меня есть этот код для контроля, если значение EditTextPreference равно нулю или нет:

    case R.id.prochain_vidange:
                settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
                String choix_huile = settings.getString("listPref_huile_moteur", "0");
                km = settings.getString("km", "");
                Log.d("TAG",km);
               int x= Integer.valueOf(km);
               if (km != "")
{
               if (Integer.valueOf(choix_huile) == 0) {
    ............

Проблема в этой строке:

int x= Integer.valueOf(km);

В чем может быть проблема?Спасибо.

Ответы [ 3 ]

1 голос
/ 13 августа 2011

Integer.valueOf пытается создать новое целое число с помощью .parseInteger (String s), "" не может быть проанализирован с допустимым числом, поэтому вы получаете NumberFormatException

.Вы можете просто не пытаться сделать целое число со строкой "".

до:

int x= Integer.valueOf(km);
if (km != "") {

после:

if (km != "") {
int x= Integer.valueOf(km);
1 голос
/ 13 августа 2011

Integer.valueOf(km) может выдать исключение, если строка km не может быть проанализирована как целое число.

Однако перенос ее в блок try { } catch() не является подходом, который я бы рекомендовал.

Целью использования значения по умолчанию для метода getString() в SharedPreferences является то, что может быть значение по умолчанию, к которому можно вернуться, еслипредпочтение не существует.Поэтому лучший способ решить эту проблему состоит в том, чтобы изменить ваш settings.getString(...) вызов так, чтобы он был таким:

 km = settings.getString("km", "0");

Тогда при последующем вызове Integer.valueOf(km) не будет пробела при сбое.1020 * Входная строка приходит из пустого текстового поля, где пользователь может ввести любое значение?Если это так, то в этот момент вы можете проверить значение, введенное пользователем.Проверяя ввод на ранней стадии, вам не нужно будет разбрасывать механизм проверки / валидации на другие области вашего кода.

1 голос
/ 13 августа 2011

Если вы дадите Integer.valueOf (String s) строку, которая не является допустимым числом, она вызывает исключение NumberFormatException.Измените значение по умолчанию на 0:

km = settings.getString("km", "0");

Кроме того, вы можете перехватить исключение и установить x на 0:

km = settings.getString("km", "");
int x;
try {
    x = Integer.valueOf(km);
} catch(NumberFormatException e) {
    x = 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...