【发布时间】:2014-04-01 15:16:14
【问题描述】:
我有一个这样的 json 模式
objects: [
-{
category: {
id: 4,
image: "category image url",
title: "LIGHT"
},
create_time: "2014-03-20T17:57:23",
file_url: "file url",
id: 26,
title: "Note",
user: {
avatar: "thumb url",
id: 12,
name: "user name"
}
}
-{
category: {
id: 1,
image: "category image url",
title: "HEAVY"
},
create_time: "2014-03-20T17:57:23",
file_url: "file url",
id: 25,
title: "Photo",
user: {
avatar: "thumb url",
id: 2,
name: "user name"
}
}
.
.
.
]
当我解析这个块时,一切都很好,直到我想将解析的节点放入 Hashmap。 用于解析我将节点和对象定义为 TAG 之类的
public static final String TAG_CAT_ID = "id";
public static final String TAG_TONE_ID = "id";
public static final String TAG_USER_ID = "id";
public static final String TAG_CAT_TITLE = "title";
public static final String TAG_TITLE = "title";
然后我在 For 循环中解析它们并将结果保存为这样的字符串:
String cat_id = category.getString(TAG_CAT_ID);
String cat_title = category.getString(TAG_CAT_TITLE);
String file_id = file.getString(TAG_TONE_ID);
String file_title = file.getString(TAG_TITLE);
String user_id = user.getString(TAG_USER_ID);
正如我应该说的......类别、文件和用户定义为 JSON 对象。 到目前为止一切正常,我可以得到我想要的结果:
cat_id -> 4
cat_title -> LIGHT
file_id -> 26
file_title -> Note
user_id -> 12
----------------------
cat_id -> 1
cat_title -> HEAVY
file_id -> 25
file_title -> Photo
user_id -> 2
在本节之后,我将这个结果放在 HashMap 中,如下所示:
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_CAT_ID, cat_id);
map.put(TAG_TONE_ID, tone_id);
map.put(TAG_USER_ID, user_id);
灾难发生了!!对于每个对象...哈希映射只返回一个 id !!!!!! cat_id、file_id、user_id 相同的 id.......cat_title 和 file_title 一个标题!!!
我哪里错了?!
【问题讨论】:
-
如果您将现有键的值放入
HashMap,则该键的先前值将被覆盖。有意义吗? -
灾难发生是因为您放置的 TAG_CAT_ID、TAG_TONE_ID、TAG_USER_ID 都具有相同的字符串值。 Hashmap 只能有唯一的键。重复项将被覆盖。
-
嗯....我该怎么办?!我无法更改 api :(
-
您始终可以使用 MultiMap。 guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/… 在这种情况下,您将拥有三个具有相同名称的键 - “id”。不确定如何区分它们。也许 MultiMap 保持顺序;我以前从未使用过。
标签: java android json hashmap baseadapter