2014-10-10 72 views
0

我真的不明白为什么java.lang.NumberFormatException:无效long:“null”在这里发生。即使在字符串空或空字符串检查后,Android Java异常

问题代码片段如下所示。

try { 
     userid = ((JSONObject) msg.obj).getString("userid"); 
     if (userid.equals("") || userid.isEmpty() || null==userid) { 
       onClickLogout(); 
       return; 
     } else { 
      client.setUserid(Long.parseLong(userid)); 
     } 
    } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      onClickLogout(); 
      return; 
    } 

line client.setUserid(Long.parseLong(userid));得到以下异常

java.lang.NumberFormatException: Invalid long: "null" 
at java.lang.Long.invalidLong(Long.java:125) 
at java.lang.Long.parse(Long.java:362) 
at java.lang.Long.parseLong(Long.java:353) 
at java.lang.Long.parseLong(Long.java:319) 
at client.setUserid(Long.parseLong(userid)); 

的一点是,空例外,甚至之后的代码的用户ID的空和空管检查发生。我在这里有什么问题?请查看专家!

+2

首先检查用户标识是否为空,而不是调用等号,否则您可能遇到NPE – 2014-10-10 14:43:31

+0

我已编辑您的问题,请检查。这可以避免可能的NullPointerException。另外,你应该添加@laalto'sanswer。 – 2014-10-10 14:49:32

+0

哦,对不起@PedroOliveira。我刚刚看到您的评论xD – 2014-10-10 14:50:14

回答

2

字符串而不是引用是null

您可以添加"null".equals(userid)来测试if中的字面值null值,您可以在其中检查各种形式的“无值”。

+0

谢谢你们!这里奇怪的是userid =((JSONObject)msg.obj).getString(“userid”);只有“”或一些数字。 “”案例涵盖了没有相关的用户号码。这种情况实际上就是这种不可能的情况。这种情况很少发生。我只是通过谷歌的报告才看到这种情况。这次我会尝试你的解决方案。谢谢! – 2014-10-10 15:39:27

1

务必先检查空值,你的病情

if (null==userid || userid.isEmpty() || userid.equals("null") { 

然后,在你的病情的下一个元素,你确信用户标识不为空,没有NullPointerException异常将被抛出

而且,在你的情况下,检查用户ID不包含“空”字符串

而且userid.equals("")userid.isEmpty()是同样的事情。

+0

感谢您的评论!拉尔托偷走了你的雷! – 2014-10-10 15:42:24

0

可以与工具方法isEmptyTextUtils检查null

public static boolean isEmpty(CharSequence str) { 
    return str == null || str.length() == 0; 
} 

isEmpty(CharSequence str)方法检查这两个条件,null和长度。