原文章地址:Gson int类型被转换成double问题解决(完美解决)
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
需要implementation 'com.google.code.gson:gson:2.10.1'
/**
* 第一步:构建gson,解决int自动转double问题
* @return
*/
public Gson buildGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
// //这种使用 返回时所有的String
gsonBuilder.setObjectToNumberStrategy(ToNumberPolicy.LAZILY_PARSED_NUMBER);
gsonBuilder.setObjectToNumberStrategy(new ToNumberStrategy() {
@Override
public Number readNumber(com.google.gson.stream.JsonReader in) throws IOException {
JsonToken token = in.peek();
switch (token) {
case NUMBER:
/**
* 改写数字的处理逻辑,将数字值分为整型与浮点型。
*/
double dbNum = in.nextDouble();
// 数字超过long的最大值,返回浮点类型
if (dbNum > Long.MAX_VALUE) {
return dbNum;
}
// 判断数字是否为整数值
long lngNum = (long) dbNum;
if (dbNum == lngNum) {
try {
return (int) lngNum;
} catch (Exception e) {
return lngNum;
}
} else {
return dbNum;
}
case NULL:
in.nextNull();
return null;
default:
throw new IllegalStateException("Unexpected token: " + token);
}
}
});
return gsonBuilder.create();
}
使用
mRetrofit = new Retrofit.Builder()
.baseUrl(SERVER_URL)
.addConverterFactory(GsonConverterFactory.create(buildGson()))
.client(genericClient()).build();
文章讲述了如何在Retrofit中使用Gson2.10.1版本解决Int自动转换为Double的问题,通过自定义ToNumberStrategy处理数字类型转换。

1234

被折叠的 条评论
为什么被折叠?



