2016-09-26 13 views
0

JsonからSimpleAdapterでListviewに解析するデータを表示しようとしました。Android JsonArrayがSimpleAdapterでListviewにすべての値を取得できませんでした。

JsonArrayに複数の値に問題がある場合を除き、すべてのデータを表示できます。

enter image description here

あなたが見ることができるように、それだけですべての要素JsonArrayの最後の要素を表示しなく

JSONObject jsonObject = new JSONObject(response); 
    String get_option_data=jsonObject.getString("option_data"); 
    JSONObject jsonObject1 = new JSONObject(get_option_data); 
    Iterator<String> iterator = jsonObject1.keys(); 
    while (iterator.hasNext()) { 

     String oid = iterator.next(); 
     String name_value=jsonObject1.getString(oid); 
     JSONObject jsonObject2=new JSONObject(name_value); 
     Iterator<String> iterator1 = jsonObject2.keys(); 

     while (iterator1.hasNext()) { 
      String name=iterator1.next(); 
      HashMap<String, String> map = new HashMap<>(); 
      map.put("oid",oid); 
      map.put("name",name); 
      JSONArray jsonArray=jsonObject2.getJSONArray(name); 
      int i; 
      for(i=0;i<jsonArray.length();i++){ 
       map.put("value",jsonArray.getString(i)); 
      } 
      aList.add(map); 
     } 
    } 
    String[] from = {"oid","name","value"}; 
    int[] to = {R.id.oid,R.id.name,R.id.value}; 
    SimpleAdapter adapter = new SimpleAdapter(option.this, aList, R.layout.option_template, from, to); 
    ListView listView = (ListView) findViewById(R.id.listview); 
    listView.setAdapter(adapter); 

をコーディングJSONデータ

{ 
    "57": { 
    "Steak Doness": [ 
     "well done", 
     "medium", 
     "rare" 
    ] 
    }, 
    "58": { 
    "Size": [ 
     "small", 
     "medium", 
     "large", 
     "extra large" 
    ] 
    }, 
    "59": { 
    "Cooking Method": [ 
     "spicy", 
     "non-spicy" 
    ] 
    }, 
    "63": { 
    "Coldness": [ 
     "with ice", 
     "without ice" 
    ] 
    } 
} 

のjavaそのJsonArray。誰が何が間違っているか知っていますか?

答えて

1

ここでは、ハッシュマップの同じ位置に複数の値をオーバーライドしています。だから、複数の値のための新しいハッシュマップのいずれかを作成するか、またはすべての値のコンマは、単一のキー

あなたの間違いに区切っていることを渡す必要があります:

while (iterator1.hasNext()) { 
     String name=iterator1.next(); 
     HashMap<String, String> map = new HashMap<>(); 
     map.put("oid",oid); 
     map.put("name",name); 
     JSONArray jsonArray=jsonObject2.getJSONArray(name); 
     int i; 
     for(i=0;i<jsonArray.length();i++){ 
      map.put("value",jsonArray.getString(i)); 
     } 
     aList.add(map); 
    } 

解決策:特殊なアダプタで

while (iterator1.hasNext()) { 
     String name=iterator1.next(); 
     HashMap<String, String> map = new HashMap<>(); 
     map.put("oid",oid); 
     map.put("name",name); 
     JSONArray jsonArray=jsonObject2.getJSONArray(name); 
     int i; 
     String myValues = ""; 
     for(i=0;i<jsonArray.length();i++){ 
      if(myValues.equalsIgnoreCase("")) 
       myValues = jsonArray.getString(i); 
      else 
       myValues = myValues +","+jsonArray.getString(i); 
     } 
     map.put("value",myValues); 
     aList.add(map); 
    } 

、あなたがしますこの文字列をプッシュして新しい配列を作成します。

String[] values = "yourcommaseperatedValue".spilt(","); 

そして、 Textviewの値の配列は以下のようになります。

for(int i = 0 ; i < values.length(); i++){ 
    yourtextview.setText(values[i]+"\n"); 
} 

より良いアプローチ

あなたは複数の値を格納するのArrayListを取ることができるが、その場合には、あなたはタイプ

あなたはあなたの一意のIDを格納します
HashMap<String, ArrayList<String>> map = new HashMap<>(); 

で新しいHashMapを取る必要がありますキーと値として "oid"は値jsonArrayになります。

+0

これまでのところうまく動作します。すべての要素が表示されます。次に、 "あなたのアドパターでは、split("、 ")を使って配列を作成して使用する必要があります。"あなたはこの部分のコーディングを提供できますか?すべての値がスペースなしで一緒に張り付いているので – gosulove

+0

@gosulove:今すぐチェック – Jai

+0

素晴らしい!それは今すぐうまく動作します – gosulove

2
for(i=0;i<jsonArray.length();i++){ 
    map.put("value",jsonArray.getString(i)); 
} 

両方の配列値を同一のマップキー、つまりvalueに置き換えます。ループは動作中に、最初の値を後の値に置き換えます。配列の値をリストに格納し、リスト全体をマップに追加することができます。

ArrayList<String> values = new ArrayList<String>(); 
    for(int i=0;i<jsonArray.length();i++){ 
     values.add(jsonArray.getString(i)); 
    } 
    map.put("value", values; 

残っているのは、それを繰り返してリストから値を表示するためにアダプタの端を少し変更するだけです。

+0

?私はあなたを得ないので、コードのどの部分を変更する必要がありますか? – gosulove

+1

あなたはマップ内の同じ 'value'キーを置き換えていますので、最後の値はマップに保存されています。私の答えを更新しています。 – fluffyBatman

+0

@gosulove今すぐ答えを確認してください。 – fluffyBatman

関連する問題