Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSON中的LinkedHashMap在get()时返回null_Java_Android - Fatal编程技术网

Java JSON中的LinkedHashMap在get()时返回null

Java JSON中的LinkedHashMap在get()时返回null,java,android,Java,Android,我从JSON构建了一个LinkedHashMap。 当我记录条目时,它们就在这里,但是当我调用get()(例如40)时,它返回null。 我错在哪里 String json = "{\"0\":0,\"34\":0,\"36\":0,\"38\":0,\"40\":3}"; Gson gson = new GsonBuilder().create();

我从JSON构建了一个
LinkedHashMap
。 当我记录条目时,它们就在这里,但是当我调用
get()
(例如40)时,它返回null。 我错在哪里

    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));

问题是键的类型不是
Byte
,而是
String
。仅仅因为您强制转换,并不意味着库将正确地反序列化它,它不会查看您声明的java类型,而是查看
fromJson
的第二个参数,它只是一个
LinkedHashMap
,在本例中没有泛型

所以基本上:
map.get(“40”)

要将其正确反序列化为
字节
,您可以:

LinkedHashMap=gson.fromJson(json,TypeToken.getParameterized(LinkedHashMap.class,Byte.class,Integer.class).getType());
System.out.println(“map.get(40)=”+map.get((字节)40));

注意,散列映射使用
hashCode()
equals()
并且40是
int
文本(因此被装箱为
整数)。现在看看
字节
整数
是否被视为相等(提示:
equals()
的两个实现都使用
instanceof
检查两者是否属于同一类型)。
item[0] = 0.0
item[34] = 0.0
item[36] = 0.0
item[38] = 0.0
item[40] = 3.0
map.get(40) = null