2014-10-10 73 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和長度。