首页 文章

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

提问于
浏览
32

我花了两个多小时调试看起来极不可能的东西 . 我已经删除了辅助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 回答

  • 10

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

  • 4

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

  • 94

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

  • 7

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

  • 7

    为了理解这一点,一些例子:

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

    返回: null

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

    返回: 3000

    使用 Long.parseLong()

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

    返回: 32340

    文档将getLong()方法描述为:

    返回由string标识的系统属性的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()方法 .

相关问题