39

在过去的两个小时里,我一直在调试似乎极不可能的事情。我已经将辅助 Android Activity 的方法剥离为:

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): Uncaught handler: thread main 由于未捕获异常而退出 09-11 02:02:50.464: ERROR/AndroidRuntime(1588): java.lang.NullPointerException

看起来(来自其他测试) Long.getLong(str) 返回 NULL,这让我发疯了。我错过了什么?

提前致谢。我可以愚蠢地错过明显的东西,但我的理智已经上线。

4

5 回答 5

118

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

于 2011-09-11T08:28:34.227 回答
11

您可以使用Long.parseLong(String), 而不是getLong(String): 它将解决问题。

于 2011-09-11T07:20:47.337 回答
7

我认为你使用了错误的函数使用Long.parseLong(str)那么你可以得到正确的答案。

于 2011-09-11T07:24:08.350 回答
7

Long.parseLong(someString) 批准。如果有可能出现无法解析的字符串,请不要忘记捕获 NumberFormatException。

于 2011-09-11T07:53:18.763 回答
5

为了理解这一点,举几个例子:

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()方法。

于 2016-05-12T18:22:11.617 回答