我真的不明白为什么java.lang.NumberFormatException:无效的长:" null"发生在这里。
问题片段如下所示。
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;
}
行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));
重点是即使在代码中的userid的空和空检查之后也会发生null异常。我这里有什么问题?请查看专家!
答案 0 :(得分:2)
字符串值而不是引用是null
。
您可以添加"null".equals(userid)
来测试null
中的文字if
值,您可以在其中检查各种形式的"无价值"。
答案 1 :(得分:1)
请务必先检查条件中的空值
if (null==userid || userid.isEmpty() || userid.equals("null") {
然后,在条件的下一个元素中,您确定userid不为null并且不会抛出NullPointerException
另外,在您的情况下,请检查userid是否包含" null"串
此外userid.equals("")
和userid.isEmpty()
是相同的。
答案 2 :(得分:0)
您可以使用null
中的实用方法isEmpty
检查TextUtils
,
public static boolean isEmpty(CharSequence str) {
return str == null || str.length() == 0;
}
isEmpty(CharSequence str)
方法检查条件,null
和长度。