我通过JSON构建了get()
。
当我记录条目时,它们在这里,但是当我调用 String json = "{\"0\":0,\"34\":0,\"36\":0,\"38\":0,\"40\":3}";
Gson gson = new GsonBuilder().create();
LinkedHashMap<Byte, Integer> map = new LinkedHashMap<>();
map = gson.fromJson(json, map.getClass());
for (Map.Entry<Byte, Integer> entry : map.entrySet()) {
Log.i(TAG, "item[" + entry.getKey() + "] = " + entry.getValue());
}
Log.i(TAG, "map.get(40) = " + map.get(40));
(例如40)时,它返回null。
我哪里错了?
item[0] = 0.0
item[34] = 0.0
item[36] = 0.0
item[38] = 0.0
item[40] = 3.0
map.get(40) = null
输出:
<t t-set="current_subtotal" t-value="0"/>
答案 0 :(得分:1)
问题是密钥的类型不是Byte
-它们是String
。仅仅因为您进行了强制转换,并不意味着库会正确地对其进行反序列化,所以它不会查看您声明的Java类型,而是查看fromJson
的第二个参数,它只是一个LinkedHashMap
,没有在这种情况下是泛型。
所以基本上:map.get("40");
。
要使其正确反序列化为Byte
,您可以:
LinkedHashMap<Byte, Integer> map = gson.fromJson(json, TypeToken.getParameterized(LinkedHashMap.class, Byte.class, Integer.class).getType());
System.out.println("map.get(40) = " + map.get((byte)40));