7

私はこの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上記のようになります。

Null JSONオブジェクトを取得するかどうかは気にStringしないようですが、取得するとアプリがクラッシュしますFloat.valueOf(theString)

別の補足として、私はこの方法でテストしようとしました:

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

しかし、文字列をnullとして読み取ることはありません。この場合、実際にはそうではありませんnullか?

4

4 に答える 4

25

次の方法を使用して、JsonObject任意のキーに対する値がnullかどうかを確認します

public boolean isNull(java.lang.String key)

このメソッドは、任意のキーに対してNullをチェックするため、またはキーに値がない場合に使用されます。

以下のスニペットを使用

if (jsonObject.isNull("AverageRating")) {
    Toast.makeText(this, "Cannot Convert!!", Toast.LENGTH_LONG).show();
    //float set to 0
} else {
    Float.valueOf(jsonObject.getString("AverageRating"));
}
于 2012-06-22T23:18:53.220 に答える
4
String str = jObject.getString("AverageRating");
float number = 0.f;
try
{
    number = Float.parseFloat(str);
}
catch (NumberFormatException e)
{
    number = 0;
}

parseFloat()を受け取った場合、例外をスローしますnull

于 2012-06-22T23:03:30.730 に答える
0

値を解析する前にnullをチェックしてください。

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

そうは言っても、の値AverageRatingが実際に数値である場合、JSONを生成しているエンティティはそれを文字列としてJSONに追加するべきではありません。フィールドに値がない場合、フィールドは存在しないはずです。フィールドに値がある場合、それは数値である必要があります。

それが本当なら、あなたはそれをこのように扱うことができます、

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

他の投稿は単にキャッチすることを提案していNumberFormatExceptionます。これは、フィールドに常に有効なdouble値があり、それ以外の場合は例外的であると見なす場合にのみ正しいです。フィールドが不在になることがあることを知っている/予想している場合、それは例外的な条件とは見なされません。

于 2012-06-22T23:12:29.760 に答える
0
if (json != null && json.getString(KEY_SUCCESS) != null){
    // PARSE RESULT 
}else{
    // SHOW NOTIFICIATION: URL/SERVER NOT REACHABLE
}

それは、json値としてキーのようなnull値をチェックすると言われています。

于 2015-08-28T10:02:18.593 に答える