Long.getLong () завершается неудачно, возвращая нулевое значение в правильную строку - PullRequest
32 голосов
/ 11 сентября 2011

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

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

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

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

Похоже(из других тестов), что Long.getLong (str) возвращает NULL, что сводит меня с ума.Что я пропускаю?

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

Ответы [ 5 ]

100 голосов
/ 11 сентября 2011

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

11 голосов
/ 11 сентября 2011

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

7 голосов
/ 11 сентября 2011

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

7 голосов
/ 11 сентября 2011

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

4 голосов
/ 12 мая 2016

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

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

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

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

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

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

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

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

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

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

это код метода 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 () .

...