2012-05-06 30 views
1

私は、そのグループとその子のためのサーバー(JSON配列)からの応答からデータを取得するExpandableListViewを持っていたいと思っています。
どうすればいいですか?
私はSimpleCursorTreeAdapterがあることを知っているが、それが唯一のカーソルを使用して、私は前にそれを使用しますが、このアダプタはJSON配列とそれを使用するために、私は任意の同等のものを必要とするJSON配列でExpandableListView

これはgroupItemsを取得するための機能である

SimpleExandableListAdapterを使用して、それをされることの
 protected void BindOrederItemList(final int order_id) 
    { 
     // TODO Auto-generated method stub 
     //select all categories from order items where order_id =?? 
     //select items where category=?? 
     String Url="http://192.168.3.113/mywebservices.php?op=GetOrderCategory&lang_id=1&order_id="+order_id; 
     GetNetworkData.OnPostExecuteListener listener=new GetNetworkData.OnPostExecuteListener() 
     { 

      @Override 
      public void onPostExecute(String result) { 
       // TODO Auto-generated method stub 
       if (result!=null) 
       { 
        try 
        { 

       JSONArray jArray = new JSONArray(result); 
       HashMap<String, String> Catmap = new HashMap<String, String>(); 
       // ArrayList<Integer> category=new ArrayList<Integer>(); 
       for (int i = 0; i < jArray.length(); i++) 

        { 

         JSONObject e = jArray.getJSONObject(i); 
          id=e.getInt("order_id"); 

         cat_name=e.getString("cat_name"); 
          cat_id=e.getInt("cat_id"); 
          Catmap.put("cat_id",String.valueOf(cat_id)); 
          Catmap.put("cat_name", cat_name); 
          catItemsList.add(Catmap); 

        } 
       Log.i("Insid For Loop", "Group size = "+catItemsList.toArray()); 



         // Log.i("Bind item", "CAT SIZE "+catItemsList.size()); 

         } 
        catch(Exception e) 
        { 
         e.printStackTrace(); 
        } 
       } 

      } 

     }; 

     try 
     { 
     GetNetworkData task = new GetNetworkData(Url,null,listener); 
     task.execute(); 
     } 
     catch(Exception e) 
     { 

      e.printStackTrace(); 

     } 
    } 

おかげ

+0

ですが、私はできません変更を見つけることができますどのように私は私の問題を解決することができます..ありがとう – Basant

答えて

1

一つの方法。

この場合、JSONデータを最初にフェッチしてマップのリストとして保存する必要があります。 AsyncTaskLoaderを使用してデータを取得して再パッケージ化した後、バックグラウンドでアダプタの新しいインスタンスを作成し、ExandableListViewにスワップします。私は、データが動的であるとき、拡張可能なリストに対処する方法の、ここでMySQLデータベース(JSON配列)からの問題を解決する必要があり

+0

私はあなたのコードにAsyncTaskLoaderを置く場所を教えてください今まで書くコードを置くために私の質問を編集する – Basant

+0

私はAsyncTaskサーバーからのデータはAsyncTaskLoader – Basant

+0

@Basantとは異なります。AsyncTaskも同様です。 SimpleExpandableListAdapterの使用方法と実装方法については、[こちらは例です](http://www.coderzheaven.com/2011/04/10/expandable-listview-in-android-using-simpleexpandablelistadapter-a-simple-example/)それがあなたが求めていたものならば。そうでない場合は、私にもう一度お尋ねください。 –

1

は、あなたが私の質問を編集@aromero答え

 protected void BindOrederItemList(final int order_id) 
    { 
     // TODO Auto-generated method stub 
     //select all categories from order items where order_id =?? 
     //select items where category=?? 

     JSONObject params = new JSONObject(); 
     //int no_pepole=Integer.valueOf(noOfGest_txt.getText().toString()); 
      try 
      { 
     // params.put("order_status",myStatus); 
     int rest_id=prefs.getInt("Rest_id", 0); 
      params.put("order_id", order_id); 
      params.put("lang_id", 1); 
      params.put("rest_id", rest_id); 
      //params.put("order_status", 0); 
     // params.put("noOfpepole",number_of_guest); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 



     String Url="http://192.168.3.113/mywebservices.php?op=GetOrderCategory"; 
     GetNetworkData.OnPostExecuteListener listener=new GetNetworkData.OnPostExecuteListener() 
     { 

      @Override 
      public void onPostExecute(String result) { 
       // TODO Auto-generated method stub 
       if (result!=null) 
       { 
        try 
        { 
        catItemsList.clear(); 
       JSONArray jArray = new JSONArray(result); 
       ArrayList<ArrayList<HashMap<String, String>>> list=new ArrayList<ArrayList<HashMap<String, String>>>(); 
       // ArrayList<Integer> category=new ArrayList<Integer>(); 

       for (int i = 0; i < jArray.length(); i++) 

        { 
         HashMap<String, String> Catmap = new HashMap<String, String>(); 

         JSONObject e = jArray.getJSONObject(i); 
          id=e.getInt("order_id"); 

         cat_name=e.getString("cat_name"); 
          cat_id=e.getInt("cat_id"); 
          Catmap.put("cat_id",String.valueOf(cat_id)); 
          Catmap.put("cat_name", cat_name); 
          catItemsList.add(Catmap); 
          Log.i("Insid For Loop", "order ID "+order_id); 

          list= BindCatItems(cat_id, order_id); 



         Log.i("Insid For Loop", "Child size = "+list.size()); 
        } 
       // Log.i("Insid For Loop", "Group size = "+catItemsList.size()); 

       SimpleExpandableListAdapter expandListAdapter= new SimpleExpandableListAdapter(getActivity(), 
          catItemsList, R.layout.group_item, 
          new String[] {"cat_name"},new int[]{R.id.lbl_cat_group}, 
          BindCatItems(cat_id, order_id), R.layout.category_row, new String[]{"item_name"}, new int[]{R.id.txt_category_row}); 


       order_items_list.setAdapter(expandListAdapter); 
         // Log.i("Bind item", "CAT SIZE "+catItemsList.size()); 

         } 
        catch(Exception e) 
        { 
         e.printStackTrace(); 
        } 
       } 

      } 

     }; 

     try 
     { 
     GetNetworkData task = new GetNetworkData(Url,params,listener); 
     task.execute(); 
     } 
     catch(Exception e) 
     { 

      e.printStackTrace(); 

     } 
    } 

    protected ArrayList<ArrayList<HashMap<String, String>>> BindCatItems(int cat_id,int order_id) 

    { 
     // TODO Auto-generated method stub 
     ItemsList.clear(); 
     JSONObject params = new JSONObject(); 

     //int no_pepole=Integer.valueOf(noOfGest_txt.getText().toString()); 
      try 
      { 
     // params.put("order_status",myStatus); 
     int rest_id=prefs.getInt("Rest_id", 0); 
      params.put("order_id", order_id); 
      params.put("lang_id", 1); 
      params.put("cat_id",cat_id); 
      //params.put("order_status", 0); 
     // params.put("noOfpepole",number_of_guest); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 


     String Url="http://192.168.3.113/mywebservices.php?op=GetOrderItems"; 
     GetNetworkData.OnPostExecuteListener listener=new GetNetworkData.OnPostExecuteListener() 

     { 

      @Override 
      public void onPostExecute(String result) { 
       // TODO Auto-generated method stub 
       if (result!=null) 
       { 
        try 
        { 
         Log.i("log bind","Inside Bind Category items"); 
         // catItemsList.clear(); 
         ArrayList<HashMap<String, String>> mapList = 
            new ArrayList<HashMap<String, String>>(); 
         JSONArray jArray = new JSONArray(result); 

          for (int i = 0; i < jArray.length(); i++) 
          { 
           HashMap<String, String> map = new HashMap<String, String>(); 

           JSONObject e = jArray.getJSONObject(i); 

           int id=e.getInt("item_id"); 
           if (id==0) 
           { 

           } 


           else 
           { 



           map.put("item_id",String.valueOf(e.getInt("item_id"))); 
           map.put("oi_id", String.valueOf(e.getInt("oi_id"))); 
           map.put("item_name", e.getString("item_name")); 
           map.put("quantity",String.valueOf(e.getString("quantity"))); 
           map.put("price", String.valueOf("price")); 
         mapList.add(map); 

           } 
          } 

          ItemsList.add(mapList); 

         // Log.i("Bind Item Order", "CAT SIZE "+catItemsList.size()); 



          /* ItemsAdapter=new SimpleAdapter(getActivity(), catItemsList, 
            R.layout.list_item, 
            new String[] {"item_name"}, 
            new int[]{R.id.list_item_title}); 
          */ 
          // Log.i("Add Section","ItemsAdapter count= "+ItemsAdapter.getCount()); 


          //order_list.setAdapter(adapter); 
          //adapter.notifyDataSetChanged(); 
        } 
        catch(Exception e) 
        { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }; 

     try 
     { 
     GetNetworkData task = new GetNetworkData(Url,params,listener); 
     task.execute(); 
     } 
     catch(Exception e) 
     { 

      e.printStackTrace(); 

     } 
     return ItemsList; 


    } 
+1

ちょっと@Basant、私の答えは、その情報に基づいてあなた自身の答えを書くことは非常に丁寧ではないし、自分自身に正しい答えを与え、私の答えをupvoteさえしないでください。 –