2016-08-11 43 views
2

私はこのパターンのようにサーバーからjsonを取得しています。アンドロイドのjson配列内でJSON配列を解析する

[ 
    { 
     "Response":[ 
     { 
      "CategoryID":1, 
      "CategoryName":"Software", 
      "Count":1, 
      "Tasks":[ 
       { 
        "ATId":17, 
        "TaskName":"Def", 
        "TaskId":17, 
        "TaskDetails":"FGH" 
       } 
      ] 
     }, 
     { 
      "CategoryID":2, 
      "CategoryName":"Hardware", 
      "Count":5, 
      "Tasks":[ 
       { 
        "ATId":3, 
        "TaskName":"Def", 
        "TaskId":5, 
        "TaskDetails":"FGH" 
       }, 
       { 
        "ATId":4, 
        "TaskName":"Def", 
        "TaskId":6, 
        "TaskDetails":"FGH" 
       }, 
       { 
        "ATId":6, 
        "TaskName":"Def", 
        "TaskId":6, 
        "TaskDetails":"FGH" 
       }, 
       { 
        "ATId":11, 
        "TaskName":"Def", 
        "TaskId":13, 
        "TaskDetails":"FGH" 
       }, 
       { 
        "ATId":12, 
        "TaskName":"Def", 
        "TaskId":14, 
        "TaskDetails":"FGH" 
       } 
      ] 
     }, 
     { 
      "CategoryID":3, 
      "CategoryName":"Web", 
      "Count":1, 
      "Tasks":[ 
       { 
        "ATId":13, 
        "TaskName":"Def", 
        "TaskId":11, 
        "TaskDetails":"FGH" 
       } 
      ] 
     }, 
     { 
      "CategoryID":4, 
      "CategoryName":"Ios", 
      "Count":3, 
      "Tasks":[ 
       { 
        "ATId":5, 
        "TaskName":"Def", 
        "TaskId":7, 
        "TaskDetails":"FGH" 
       }, 
       { 
        "ATId":8, 
        "TaskName":"Def", 
        "TaskId":7, 
        "TaskDetails":"FGH" 
       }, 
       { 
        "ATId":15, 
        "TaskName":"Def", 
        "TaskId":15, 
        "TaskDetails":"FGH" 
       } 
      ] 
     } 
     ], 
     "MessageStatus":"Success", 
     "MessageCode":1 
    } 
] 

ここで私は内部オブジェクトも持つオブジェクトの配列を持っています。だから私はそれをやろうとして、すべてのデータを取得したが、これは私がサーバーから受け取るような形ではない。私が必要とするのは、正しいパターンを得ることだけです。私のJavaコードがここにあります。

@Override 
public void onResponse(String response) { 

    ParentItems entryObj = null; 
    JSONObject jsonObj = null; 
    JSONArray jsonArr = null; 
    try { 
     jsonArr = new JSONArray(response); 
     // JSONArray js=jsonObj.getJSONArray(response); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    String code = null; 
    String Message = null; 
    try { 
     jsonObj = jsonArr.getJSONObject(0); 
     code = jsonObj.optString("MessageCode"); 
     Message = jsonObj.optString("MessageStatus"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    if (code.equals("1")) { 
     try { 
      Utilities.parentItemsList = new ArrayList < >(); 
      Utilities.childItemsList = new ArrayList < >(); 
      JSONArray array = jsonObj.getJSONArray("Response"); 


      for (int i = 0; i < array.length(); i++) { 
       JSONObject entryJson = array.getJSONObject(i); 
       entryObj = new ParentItems(); 
       entryObj.CategoryID = entryJson.getInt("CategoryID"); 
       entryObj.mName = entryJson.getString("CategoryName"); 
       entryObj.Count = entryJson.getInt("Count"); 
       Utilities.parentItemsList.add(entryObj); 
       JSONArray taskArray = entryJson.optJSONArray("Tasks"); 

       for (int a = 0; a < taskArray.length(); a++) { 
        ChildItems childItems = new ChildItems(); 

        childItems.ATId = entryJson.optInt("ATId"); 
        childItems.TaskName = entryJson.optString("TaskName"); 
        childItems.TaskId = entryJson.optInt("TaskId"); 
        childItems.TaskDetails = entryJson.optString("TaskDetails"); 
        Utilities.childItemsList.add(childItems); 
       } 

      } 
     } 

    } else { 
     Toast.makeText(getContext(), "business ID is null", Toast.LENGTH_LONG).show(); 

    } 
} catch (Exception e) { 

    Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); 

} 

私はCatagoryオブジェクトは親アイテムとタスクは、あなたが以下のようにこれには二つのモデルクラスを作成する必要がある子アイテム

+0

トップレベルの各アイテムに対して、サブアイテムのリストを作成し、拡張可能なリストに追加します。あなたはそれを行ったようですが、拡張可能なリストを作成する方法はあなたの質問ですか? –

+1

はい私はデータを取得します。カテゴリワイズに割り当てることはできません。最初のカテゴリでは1つのタスクを示し、2番目のタスクでは5つのタスクなどを示しています。これは私が理解していないものです – Junaid

+0

それは間違っていますか?最初のオブジェクトには1つのアイテムがあります。 2番目には5 ... –

答えて

1

になりますでしょうパターンで拡張可能なリストビューでの私のショーショーのデータを必要とします。

あなたはもっとその助けあなたは、このリンクを参照してください。この

for (int i = 0; i < array.length(); i++) { 
      JSONObject entryJson = array.getJSONObject(i); 
      entryObj = new ParentItems(); 
      entryObj.CategoryID = entryJson.getInt("CategoryID"); 
      entryObj.mName = entryJson.getString("CategoryName"); 
      entryObj.Count = entryJson.getInt("Count"); 
      Utilities.parentItemsList.add(entryObj); 
      JSONArray taskArray = entryJson.optJSONArray("Tasks"); 

      if(taskArray.length()>0){ 

        ArrayList<ChildItems> list=new ArrayList<>(); 

      for (int a = 0; a < taskArray.length(); a++) { 
       ChildItems childItems = new ChildItems(); 

       childItems.ATId = entryJson.optInt("ATId"); 
       childItems.TaskName = entryJson.optString("TaskName"); 
       childItems.TaskId = entryJson.optInt("TaskId"); 
      childItems.TaskDetails = entryJson.optString("TaskDetails"); 
       list.add(childItems); 
      } 
      entryObj.setChildList(list); 

} 

     } 

などのデータを追加する必要が

public class ParentItems{ 
    String CategoryID; 
     String CategoryName; 
      String Count; 
    ArrayList<ChildItems> ChildList; 
    // Here Constuctor and Getter Setter 
} 

public class ChildItems{ 
     String ATId; 
       String TaskName; 
       String TaskId; 
     String TaskDetails; 
// Here Constuctor and Getter Setter 
} 

Expandable Listview Example

3

ParentItemsクラスにあります。このような別の属性を追加:

 for (int i = 0; i < array.length(); i++) { 
      JSONObject entryJson = array.getJSONObject(i); 
      entryObj = new ParentItems(); 
      entryObj.CategoryID = entryJson.getInt("CategoryID"); 
      entryObj.mName = entryJson.getString("CategoryName"); 
      entryObj.Count = entryJson.getInt("Count"); 
      entryObj.childItems = new ArrayList<>(); 
      JSONArray taskArray = entryJson.optJSONArray("Tasks"); 

      for (int a = 0; a < taskArray.length(); a++) { 
       ChildItems childItems = new ChildItems(); 
       childItems.ATId = entryJson.optInt("ATId"); 
       childItems.TaskName = entryJson.optString("TaskName"); 
       childItems.TaskId = entryJson.optInt("TaskId"); 
       childItems.TaskDetails = entryJson.optString("TaskDetails"); 
       Utilities.childItemsList.add(childItems); 
       entryObj.childItems.add(childItems); 
      } 
      Utilities.parentItemsList.add(entryObj); 

     } 

あなたが親オブジェクトの一部として、すべての子タスクを取得します。この方法:あなたのパーサーに続いて

class ParentItems { 
...Other attributes 
List<ChildItems> childItems; 
} 

をこのような何かを。

PS。このようなタスクの場合は、GSONのようなライブラリを使う方が簡単です。