2013-08-19 86 views
0

这个问题相当简单,但无法让我的脑袋围绕它。在api中通过hashMaps循环访问

以下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

我认为,这样做,你覆盖在HashMap中 – Pavlos

+0

@Pavlos键的以前的值可能是什么是一个好的解决方案? –

+0

有人在下面回答你!在你的情况下,我会使用数据库!特别是如果json很长! – Pavlos

回答

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); 
+0

如果我使用这个ArrayList ...我怎么能为这个活动使用的listView创建一个CustomAdapter? –

+0

@ user2247689你可以查看本教程http://www.androidbegin.com/tutorial/android-json-parse-images-and-texts-tutorial/ –

+0

以及这是我已经实现,但我有一个复选框,所以需要CustomAdapter来启用listView点击和checkBox点击。 –

1

它是因为你用你的HashMap中的相同键值覆盖了值。您应该为每个循环迭代使用不同的密钥。

您也可以使用键进行联合。

对于防爆:

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

      } 
1

不能存储HashMap相同的密钥。其实你可以但只有最后一把钥匙才会被储存在。HashMap只有商店唯一键。这是你只有两把钥匙的原因。

要解决它,这样做:

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

     }