在Java / Android中testing空的JSON对象

我得到这个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) 

这是代码:

 try { jObject = new JSONObject(result); starAvg = jObject.getString("AverageRating"); } ratingsBar = (RatingBar) findViewById(R.id.theRatingBar); ratingsBar.setRating(Float.valueOf(starAvg)); 

这里是上下文:

在PHP中,我平均MySQL表中的列中的总数。 当有任何行时,它将发送一个平均的数据并对其进行编码,Java将它作为一个JSON对象进行拾取。 但有时,有些情况下表可能有0行,所以我得到这个JSON对象:

  {"AverageRating":null} 

我的应用程序然后崩溃, LogCat如上所示。

String似乎并不在乎是否拿起一个空的JSON对象,但是当我做Float.valueOf(theString)时,应用程序崩溃。

另一方面说明,我试图这样testing:

 if String is Null, Float = 0 if String is not null, Float.valueOF(String) 

但是它似乎没有把String读为null。 在这种情况下它实际上不是null吗?

使用以下JsonObject方法来检查对任何键的值是否为空

 public boolean isNull(java.lang.String key) 

此方法用于检查任何键是否为空,或者键是否没有值。

使用下面的代码片段

 if (jsonObject.isNull("AverageRating")) { Toast.makeText(this, "Cannot Convert!!", Toast.LENGTH_LONG).show(); //float set to 0 } else { Float.valueOf(jsonObject.getString("AverageRating")); } 
 String str = jObject.getString("AverageRating"); float number = 0.f; try { number = Float.parseFloat(str); } catch (NumberFormatException e) { number = 0; } 

parseFloat()会在接收到null的情况下抛出exception。

在parsing值之前检查null,

 String s = jObject.getString("AverageRating"); if (s != null) { double rating = Double.parseDouble(s); // whatever } 

也就是说,如果AverageRating的值实际上是一个数字,那么生成JSON的实体不应该将其作为string添加到JSON中。 如果这个领域没有价值,那么这个领域应该是缺席的。 如果这个领域有价值,那应该是一个数字。

如果这是真的,你可以像这样处理,

 if (jObject.has("AverageRating")) { double rating = jObject.getDouble("AverageRating"); // whatever } 

其他职位build议简单地捕获NumberFormatException 。 这是唯一的正确的,如果你希望在任何时候有一个有效的双重价值的领域,并认为它是例外的。 如果您知道/预计该领域有时不存在,则不符合特殊条件。

 if (json != null && json.getString(KEY_SUCCESS) != null){ // PARSE RESULT }else{ // SHOW NOTIFICIATION: URL/SERVER NOT REACHABLE } 

被称为检查空值像键作为JSON值。