Подтвердить что ты не робот

Long.getLong() failing, возвращающий значение null в действительную строку

Я провел последние два часа, отлаживая то, что кажется крайне маловероятным. Я отключил метод вторичной активности Android для этого:

public void onClick(View v) {
        String str = "25";
        long my_long = Long.getLong(str);
} // onClick (v)

И да, я получаю сбой с хорошим ol 'NullPointerException:

09-11 02: 02: 50.444: ERROR/AndroidRuntime (1588): обработчик нечистоты: выход из основного потока из-за неперехваченного исключения 09-11 02: 02: 50.464: ERROR/AndroidRuntime (1588): java.lang.NullPointerException

Похоже (из других тестов), что Long.getLong(str) возвращает NULL, что приводит меня в бешенство. ЧТО Я НЕ ПРОПУСТИТЬ?

Спасибо заранее. Я в порядке с тупым отсутствием очевидного, но мое здравомыслие находится на линии.

4b9b3361

Ответ 1

Вам не хватает того факта, что Long.getLong(String str) не должен синтаксически разбирать строку до длинного, а скорее возвращать длинное значение системного свойства, представленного этой строкой. Как предполагали другие, вам действительно нужно Long.parseLong(String str).

Ответ 2

Вы можете использовать Long.parseLong(String) вместо getLong(String): он решит проблему.

Ответ 3

Я думаю, что вы используете неправильное использование функции Long.parseLong(str), тогда вы можете получить правильный ответ.

Ответ 4

Утвержден Long.parseLong(someString). Не забудьте поймать NumberFormatException, если есть вероятность несанкционированной строки.

Ответ 5

Чтобы понять это, несколько примеров:

Long val= Long.getLong("32340");

возвращает: null

Long val = Long.getLong("32340", 3000);

возвращает: 3000

Использование Long.parseLong():

Long val  = Long.parseLong("32340");

возвращает: 32340

В документации описывается метод getLong() как:

Возвращает длинное значение системного свойства , идентифицированное строкой.

это код метода getLong() и получает только значение свойства, определенное строкой:

  public static Long getLong(String string) {
        if (string == null || string.length() == 0) {
            return null;
        }
        String prop = System.getProperty(string);
        if (prop == null) {
            return null;
        }
        try {
            return decode(prop);
        } catch (NumberFormatException ex) {
            return null;
        }
    }

Если вы хотите проанализировать строку в Long, лучший способ - использовать метод Long.parseLong().