0

这个问题相当简单,但我无法理解它。

待处理以下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;
        }

在这里,我试图HashMapall_list即 hashMap)将“扇区”和“标题”作为键,并将它们的相应值作为值。但由于某种原因,我只能访问 projectTitle3 和 projectSector3 两次。请帮忙 !

4

3 回答 3

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);
于 2013-08-19T11:09:47.260 回答
1

这是因为您在 HashMap 中使用 Same 键覆盖了该值。您应该为每个循环迭代使用不同的键。

您也可以将 i 与 key 连接起来。

例如:

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

            }
于 2013-08-19T11:09:03.803 回答
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();
            }

        }
于 2013-08-19T11:09:33.960 回答