Reputation: 15734
I am getting this LogCat:
06-22 15:30:53.731: E/AndroidRuntime(2389): java.lang.NumberFormatException: Invalid float: "null"
06-22 15:30:53.731: E/AndroidRuntime(2389): at java.lang.StringToReal.invalidReal(StringToReal.java:63)
06-22 15:30:53.731: E/AndroidRuntime(2389): at java.lang.StringToReal.parseFloat(StringToReal.java:310)
06-22 15:30:53.731: E/AndroidRuntime(2389): at java.lang.Float.parseFloat(Float.java:300)
06-22 15:30:53.731: E/AndroidRuntime(2389): at java.lang.Float.valueOf(Float.java:337)
Here is code:
try
{
jObject = new JSONObject(result);
starAvg = jObject.getString("AverageRating");
}
ratingsBar = (RatingBar) findViewById(R.id.theRatingBar);
ratingsBar.setRating(Float.valueOf(starAvg));
Here is the context:
In PHP, I am averaging total numbers in a column in a MySQL table. When there are ANY rows, it will send back an average of the data in it and it encodes it, and Java picks it up as a JSON object. But sometimes, there are cases where a table may have 0 rows, so I get this JSON Object:
{"AverageRating":null}
My app then crashes and the LogCat
is as seen above.
The String
doesn't seem to care if it picks up a Null JSON Object but the app crashes when I do Float.valueOf(theString)
.
Another side note, I have tried to test this way:
if String is Null, Float = 0
if String is not null, Float.valueOF(String)
But it doesn't ever seem to read the String as null. Is it actually NOT null
in this case?
Upvotes: 7
Views: 16399
Reputation: 1
if (json != null && json.getString(KEY_SUCCESS) != null){
// PARSE RESULT
}else{
// SHOW NOTIFICIATION: URL/SERVER NOT REACHABLE
}
that being said check null value like key as json value.
Upvotes: 0
Reputation: 28093
Use the following method of JsonObject
to check if a value against any key is null
public boolean isNull(java.lang.String key)
This method is used to check Null against any key or if there is no value for the key.
Use below snippet
if (jsonObject.isNull("AverageRating")) {
Toast.makeText(this, "Cannot Convert!!", Toast.LENGTH_LONG).show();
//float set to 0
} else {
Float.valueOf(jsonObject.getString("AverageRating"));
}
Upvotes: 26
Reputation: 9260
String str = jObject.getString("AverageRating");
float number = 0.f;
try
{
number = Float.parseFloat(str);
}
catch (NumberFormatException e)
{
number = 0;
}
parseFloat()
will throw an exception if it receives null
.
Upvotes: 4
Reputation: 22637
check for null before you parse the value,
String s = jObject.getString("AverageRating");
if (s != null) {
double rating = Double.parseDouble(s);
// whatever
}
that being said, if the value of AverageRating
is really a number, then the entity that is generating the JSON shouldn't add it to the JSON as a string. if there's no value for the field, the field should be absent. if there's a value for the field, it should be a number.
if that were true, you could handle it like this,
if (jObject.has("AverageRating")) {
double rating = jObject.getDouble("AverageRating");
// whatever
}
other posts have suggested simply catching NumberFormatException
. this is only correct if you expect to have a valid double value in the field at all times and consider it exceptional otherwise. if you know / expect that the field will some times be absent, it does not qualify as an exceptional condition.
Upvotes: 0