NumberFormatException в GSON при преобразовании String в double

Я работаю с ответом JSON, который имеет неправильный формат. Все поля возвращаются как Строки . К сожалению, я не могу контролировать возвращаемые данные .

Я использую Gson и пытаюсь проанализировать объект JSON, который включает в себя такое поле:

{
        [...]
    "cost": "9.25"
}

Очевидно, оно должно быть напечатано как Число . Когда я пытаюсь разобрать это как 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 Line 69:

Item item = gson.fromJson(response, Item.class);

Итак, я последовал этот аналогичный вопрос и попытался создать TypeAdapter следующим образом:

public class CostTypeAdapter implements JsonDeserializer, JsonSerializer {

    public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        Double cost;
        try {
            cost = json.getAsDouble();
        } catch (NumberFormatException e) {
            cost = 0.00d;
        }
        return cost;
    }

    public JsonElement serialize(Double src, Type typeOfSrc, 
            JsonSerializationContext context) {
        return new JsonPrimitive(src);
    }
}

И зарегистрировал его при создании GsonBuilder :

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Cost.class, new CostTypeAdapter());
Gson gson = builder.create(); 

И мои Стоимость class:

public class Cost {
    private Double value;

    public Cost(Double value) {
        this.value = value;
    }

    public Double getValue() {
        return value;
    }
}

Но я получаю то же самое NumberFormatException .

Есть идеи, что здесь происходит? Разве это исключение не должно быть обнаружено в моем CostTypeAdapter.deserialize () , по крайней мере?

Любая помощь / руководство приветствуются.

5
задан Community 23 May 2017 в 12:02
поделиться