原文章地址: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();