我创建了一个网页,通过php创建json,现在我想通过android从json获取数据,但是我想将具有相同id的数组放到列表中,最后我将它放到hashmap中,以便每个对象都可以生成expandableListview,我的意思是:
Array
(
[0] => Array
(
[id] => 1
[author] => x
[book] => y
)
[1] => Array
(
[id] => 2
[author] => w
[book] => a
)
[2] => Array
(
[id] => 1
[author] => x
[book] => y2
)
[3] => Array
(
[id] => 1
[author] => x
[book] => y3
)
)
并且json结果是:
{"authors":[{"id":"1","author":"x","book":"y"},`{"id":"2","author":"w","book":"a"},{"id":"1","author":"x","book":"y2"},{"id":"1","author":"x","book":"y3"}]}`
和我在android中的代码从json获取数据:
public static HashMap<String,List<String>> toPerson(String json){
try {
JSONObject jsonPerson = new JSONObject(json);
JSONArray jsonDataAuthor = jsonPerson.getJSONArray("authors");
HashMap<String ,List<String>> author=new HashMap<String ,List<String>>();
for(int i=0; i<jsonDataAuthor.length(); i++){
List<String> bookOfAuthor=new ArrayList<String>();
JSONObject jsonPn = jsonDataAuthor.getJSONObject(i);
String authorName = jsonPn.getString("author");
String bookName = jsonPn.getString("book");
bookOfAuthor.add(bookName);
author.put(authorName,bookOfAuthor);
}
return author;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
但是我得到了可扩展的列表视图,其中有父母,每个父母只有一个孩子,但是这里有一个相同的id,我想要一个可扩展的列表视图,其中有两个父母,其中一个有3个孩子,但我不知道怎么样,我想要下面的结果:
x
ý
Y2
Y3
w
我很乐意帮助我。
答案 0 :(得分:0)
您正在每次迭代中创建一个新列表:
List<String> bookOfAuthor=new ArrayList<String>();
将其移至for循环外部。如果您的HashMap
包含ArrayList
给定ID,请携带并将bookName
添加到列表中。否则,您将在每次迭代中继续创建新的ArrayList
,并且您将不会有超过1项。
这样的事情。我可能有语法错误,我只是把它们放在一起给你一个想法:
try {
JSONObject jsonPerson = new JSONObject(json);
JSONArray jsonDataAuthor = jsonPerson.getJSONArray("authors");
HashMap<String ,List<String>> author=new HashMap<String ,List<String>>();
List<String> bookOfAuthor;
for(int i=0; i<jsonDataAuthor.length(); i++){
JSONObject jsonPn = jsonDataAuthor.getJSONObject(i);
String authorName = jsonPn.getString("author");
String bookName = jsonPn.getString("book");
if (author.contains(authorName)){
bookOfAuthor = author.get(authorName);
} else {
bookOfAuthor = new ArrayList<>();
}
bookOfAuthor.add(bookName);
author.put(authorName,bookOfAuthor);
}
return author;
} catch (JSONException e) {
e.printStackTrace();
return null;
}