【问题标题】:Long.getLong() failing, returning null to valid stringLong.getLong() 失败,将 null 返回到有效字符串
【发布时间】:2011-11-14 15:59: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:错误/AndroidRuntime(1588):未捕获的处理程序:线程主因未捕获的异常而退出 09-11 02:02:50.464: 错误/AndroidRuntime(1588): java.lang.NullPointerException

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

提前致谢。我可以愚蠢地忽略显而易见的事情,但我的理智已经上线。

【问题讨论】:

  • 使用 Long.parseLong(str);而不是 Long.getLong(str);

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我经常想知道getLong 和原始类型的其他 getX 应该在哪里做。在我看来,在与系统变量相关的Long 类上设置getLong 似乎是一个非常糟糕的设计选择,或者可能只是对我们这些像我一样过度使用 ctrl+space 的人的诅咒。反响很好。
        【解决方案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;
                }
            }
        

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

        【讨论】:

          猜你喜欢
          • 2014-04-01
          • 2018-02-27
          • 1970-01-01
          • 1970-01-01
          • 2017-02-05
          • 1970-01-01
          • 2015-01-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多