这个问题相当简单,但无法理解它。
以下api将被处理
{ "data" : [ { "id" : "102",
"sector" : "projectSector1",
"title" : "projectTitle1"
},
{ "id" : "100",
"sector" : "projectSector2",
"title" : "projectTitle2"
},
{ "id" : "98",
"sector" : "projectSector3",
"title" : "projectTitle3"
}
],
"status" : "success"
}
所以在我doInBackground
我正在运行以下代码:
protected Void doInBackground(Void... params) {
UserFunctions user = new UserFunctions();
JSob = user.allprojects();
try {
JSar = JSob.getJSONArray("data");
} catch (JSONException e1) {
e1.printStackTrace();
}
for(int i=0; i<JSar.length(); i++){
try {
JSONObject newobj = JSar.getJSONObject(i);
project_title = newobj.getString("title");
project_sector = newobj.getString("sector");
all_list.put("title", project_title);
all_list.put("sector", project_sector);
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
这里我试图HashMap
(all_list
是hashMap)“扇区”和“标题”作为键,并以值的形式接收它们的相应值。但由于某种原因,我只能访问projectTitle3和projectSector3两次。请帮忙 !
答案 0 :(得分:2)
您可以执行以下操作
//Create a list of hashmap
ArrayList<HashMap<String, String>> lst = new ArrayList<HashMap<String, String>>();
//in doInBackground method
HashMap<String, String> all_list = new HashMap<String, String>();
all_list.put("title", project_title);
all_list.put("sector", project_sector);
lst.add(map);
答案 1 :(得分:1)
因为你在HashMap中使用Same键覆盖了值。您应该为每个循环迭代使用不同的键。
你也可以用钥匙结合我。
对于Ex:
for(int i=0; i<JSar.length(); i++){
try {
JSONObject newobj = JSar.getJSONObject(i);
project_title = newobj.getString("title");
project_sector = newobj.getString("sector");
all_list.put("title"+i, project_title);
all_list.put("sector"+i, project_sector);
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 2 :(得分:1)
您无法将相同的密钥存储到HashMap
。实际上,您可以只存储最后一个密钥。HashMap
仅存储唯一密钥。这就是为什么你只有2把钥匙的原因。
要解决此问题,请执行以下操作:
for(int i=0; i<JSar.length(); i++){
try {
JSONObject newobj = JSar.getJSONObject(i);
project_title = newobj.getString("title");
project_sector = newobj.getString("sector");
all_list.put("title" + i, project_title);
all_list.put("sector" + i, project_sector);
} catch (JSONException e) {
e.printStackTrace();
}
}