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

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

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

И да, я получаю сбой со старым добрым 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, что сводит меня с ума. ЧТО Я УПУСТИЛА?

Заранее спасибо. Я не против тупо упустить очевидное, но на кону мое здравомыслие.


person SMBiggs    schedule 11.09.2011    source источник
comment
используйте Long.parseLong (ул); вместо Long.getLong(str);   -  person user370305    schedule 11.09.2011


Ответы (5)


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

person MeLight    schedule 11.09.2011
comment
Я часто задавался вопросом, что getLong и другие getX примитивных типов должны делать. Мне кажется очень плохим выбором дизайна иметь getLong в классе Long, который связан с системными переменными, или, возможно, просто проклятие для тех из нас, кто, как и я, слишком широко использует ctrl+space. Отличный ответ. - person abondoa; 20.03.2014

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

person confucius    schedule 11.09.2011

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

person Android Killer    schedule 11.09.2011

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

person Y.A.P.    schedule 11.09.2011

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

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().

person Jorgesys    schedule 12.05.2016