【发布时间】:2020-05-29 21:28:39
【问题描述】:
从我的应用程序 API 返回的数据包含存储为字符串的产品价格,例如:
{
price:"1500"
}
这会导致 NumberFormatException,因为 Product 模型中使用的数据类型是 BigDecimal。在应用程序中使用它之前,如何将数据库中的这个字符串解析为 BigDecimal?
我正在使用 Retrofit 和 GSON,并尝试过这里的解决方案:
NumberFormatException in GSON when converting String to double
解决方案 1:
GsonBuilder gb = new GsonBuilder();
gb.registerTypeAdapter(Float.class, new TypeAdapter<Float>() {
@Override
public Float read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return null;
}
String stringValue = reader.nextString();
try {
Float value = Float.valueOf(stringValue);
return value;
} catch (NumberFormatException e) {
return null;
}
}
@Override
public void write(JsonWriter writer, Float value) throws IOException {
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
});
这个解决方案看起来是正确的,但是当异常发生时我没有返回解析的值,而不是返回null。
解决方案 2:
.registerTypeAdapter(Double.class, new JsonSerializer<Double>() {
public JsonElement serialize(Double number, Type type, JsonSerializationContext context) {
return new JsonPrimitive(Double.valueOf(number));
}
})
对于此解决方案,BigDecimal 不是受支持的 JsonPrimitive 数据类型。
【问题讨论】:
-
在应用程序中使用它之前,如何将数据库中的这个字符串解析为 BigDecimal? 您只需将其存储在字符串中并将其解析为 BigDecimal
-
我知道该怎么做。我的问题是如何使用它来将 json 字符串解析为大十进制。
-
您确定您不是在尝试解析 json 字符串吗?在解析之前记录字符串,以便您可以了解正在解析的内容
-
价格是一个字符串。我的问题是如何使用类型适配器或 json 序列化器将其解析为大十进制
标签: android json gson retrofit