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

ここでは、「セクター」と「タイトル」をキーとしてHashMap(これall_listは hashMap です)、それらに対応する値を値として取り込もうとしています。しかし、何らかの理由で、projectTitle3 と projectSector3 が 2 回しかアクセスされません。助けてください !

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 で同じキーを使用して値をオーバーライドしているためです。ループの反復ごとに異なるキーを使用する必要があります。

i をキーと連結することもできます。

例:

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 に答える