Long.getLong()失败,返回null为有效字符串

时间:2011-09-11 07:17:04

标签: android string nullpointerexception long-integer string-parsing

我花了两个小时调试看起来极不可能的事情。我已经删除了辅助Android Activity的方法:

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,这让我疯狂。我错过了什么?

提前致谢。我很好,愚蠢地错过了明显的,但我的理智是在线。

5 个答案:

答案 0 :(得分:98)

您错过了Long.getLong(String str)不应将String解析为long的事实,而是返回由该字符串表示的系统属性的长值。正如其他人所建议的那样,您实际需要的是Long.parseLong(String str)

答案 1 :(得分:11)

您可以使用Long.parseLong(String)代替getLong(String):它可以解决问题。

答案 2 :(得分:7)

我认为你使用错误的功能 Long.parseLong(str)然后你就可以得到正确的答案。

答案 3 :(得分:7)

Long.parseLong(someString)获得批准。如果存在可解析字符串的可能性,请不要忘记捕获NumberFormatException。

答案 4 :(得分:4)

要理解这一点,请举例说明:

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;
        }
    }

如果要将String解析为Long,最好的方法是使用 Long.parseLong() 方法。