不適切な形式のJSON応答を処理しています。すべてのフィールドはStrings
として返されます。残念ながら、私は返品データを支配しません。Stringをdoubleに変換するときのGSONのNumberFormatException
私はGsonを使用して、このようなフィールドを含むJSONオブジェクトを解析しようとしています:
{
[...]
"cost": "9.25"
}
それは明らかにNumber
として印刷されなければなりません。私はString
、Number
またはdouble
としてこれを解析しようとすると、私はNumberFormatExceptionが出る:
com.google.gson.JsonSyntaxException: java.lang.NumberFormatException:
[...]
at com.myapp.android.LauncherActivity$1.onSuccess(LauncherActivity.java:69)
[...]
Caused by: java.lang.NumberFormatException:
at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:267)
at java.lang.Double.parseDouble(Double.java:285)
at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:599)
at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:228)
... 19 more
LauncherActivityライン69:
Item item = gson.fromJson(response, Item.class);
は、だから私はthis similar questionを踏襲し、そのようなTypeAdapter
を作成してみました:
そしてGsonBuilder
を作成するときに、それを登録:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Cost.class, new CostTypeAdapter());
Gson gson = builder.create();
そして、私のCost
クラス:
public class Cost {
private Double value;
public Cost(Double value) {
this.value = value;
}
public Double getValue() {
return value;
}
}
しかし、私は同じNumberFormatException
を取得します。
ここで何が起こっているかに関するアイデアはありますか?この例外は少なくとも私のCostTypeAdapter.deserialize()
で捕らえるべきではありませんか?
ご協力いただきありがとうございます。
これは、ある種のアノテーション – Gubatron