Long.getLong() failing, returning null to valid string
I've spent the past two hours debugging what seems extremely unlikely. I've stripped the method of a secondary Android Activity to exactly this:
public void onClick(View v) {
String str = "25";
long my_long = Long.getLong(str);
} // onClick (v)
And yeah, I get a crash with the good ol' NullPointerException:
09-11 02:02:50.444: ERROR/AndroidRuntime(1588): Uncaught handler: thread main exiting due to uncaught exception 09-11 02:02:50.464: ERROR/AndroidRuntime(1588): java.lang.NullPointerException
It looks like (from other tests) that Long.getLong(str) returns NU开发者_开发问答LL, which is driving me bonkers. WHAT AM I MISSING?
Thanks in advance. I'm okay with stupidly missing the obvious, but my sanity is on the line.
You are missing the fact that Long.getLong(String str)
is not supposed to parse a String to a long, but rather to return a long value of a system property represented by that string. As others have suggested, what you actually need is Long.parseLong(String str)
.
You can use Long.parseLong(String)
, instead of getLong(String)
: it will solve the problem.
I think you are using wrong function use Long.parseLong(str) then you can get the right answer.
Long.parseLong(someString) approved. Don't forget to catch NumberFormatException if there's a probability of unparsable string.
To understand this, some examples:
Long val= Long.getLong("32340");
returns: null
Long val = Long.getLong("32340", 3000);
returns: 3000
Using Long.parseLong() :
Long val = Long.parseLong("32340");
returns: 32340
The documentation describe getLong() method as :
Returns the Long value of the system property identified by string.
this is the code of the getLong() method and only get a property value defined by a string:
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;
}
}
If you want to parse a String to Long, the best way is using Long.parseLong() method.
You can use Long.parseLong(String), instead of getLong(String): it will solve the problem.
精彩评论