I am working on application in which i want one output as shown in below image.
for that i tried following code:
private ListView notification_listview;
    private String BeauticianId="98";
    private String serviceType="all";
    private ArrayList<NameValuePair> params11;
    ArrayList<MainArray_method> MainList;
    MainArray_adapter main_adapter;
    ArrayList<SubArray_method> SubList;
    SubArray_adapter sub_adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        notification_listview = (ListView) findViewById(R.id.listView_notification);
    }
    @Override
    public void onResume() {
        super.onResume();
        params11 = new ArrayList<NameValuePair>();
        params11.add(new BasicNameValuePair("iBeauticianId", BeauticianId));
        params11.add(new BasicNameValuePair("serviceType", serviceType));
        new background().execute();
    }
    private class background extends AsyncTask<Void, Void, String> {
        ProgressDialog pDialog = new ProgressDialog(MainActivity.this);
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog.setMessage("Please Wait...");
            pDialog.setCancelable(false);
            pDialog.show();
        }
        protected String doInBackground(Void... params) {
            String obj;//new JSONArray();
            try {
                obj = getJSONFromUrl("http://52.26.35.210/api/web/v1/api-beautician/services", params11);
                return obj;
            } catch (Exception e) {
            }
            return null;
        }
        @Override
        protected void onPostExecute(final String result) {
            super.onPostExecute(result);
            Log.e("Result", "" + result);
            try {
                JSONObject json = new JSONObject(result);
                String status = json.getString("status");
                Log.d("Status:", status);
                String data = json.getString("data");
                Log.d("Data:", data);
                MainList = new ArrayList<MainArray_method>();
                JSONArray MainArray = json.getJSONArray("data");
                for (int i = 0; i < MainArray.length(); i++) {
                    JSONObject jsonObject = MainArray.getJSONObject(i);
                    String MainServiceId = jsonObject.getString("iMainServiceId");
                    Log.d("MainServiceId:", MainServiceId);
                    String MainService = jsonObject.getString("main");
                    Log.d("MainService:", MainService);
                    String sub = jsonObject.getString("sub");
                    Log.d("sub:", sub);
                    SubList = new ArrayList<SubArray_method>();
                    JSONArray SubArray = jsonObject.getJSONArray("sub");
                    for (int j = 0; j < SubArray.length(); j++) {
                        /*JSONObject subjsonObject = SubArray.getJSONObject(j);*/
                        /*String SubServiceId = subjsonObject.getString("iSubServiceId");
                        Log.d("subserviceid:", SubServiceId);
                        String SubServiceName = subjsonObject.getString("vName");
                        Log.d("SubServiceName:", SubServiceName);
                        String SubServicePrice = subjsonObject.getString("fPrice");
                        Log.d("SubServicePrice:", SubServicePrice);
                        String SubServiceTime = subjsonObject.getString("vDuration");
                        Log.d("SubServiceTime:", SubServiceTime);*/
                        MainList.add(new MainArray_method(MainArray.getJSONObject(i).getString("iMainServiceId"),
                                MainArray.getJSONObject(i).getString("main")));
                        SubList.add(new SubArray_method(SubArray.getJSONObject(j).getString("iSubServiceId"),
                                SubArray.getJSONObject(j).getString("vName"),
                                SubArray.getJSONObject(j).getString("fPrice"),
                                SubArray.getJSONObject(j).getString("vDuration")));
                    }
                }
                if (main_adapter== null && sub_adapter == null)
                {
                    main_adapter=new MainArray_adapter(getApplicationContext(),MainList);
                    notification_listview.setAdapter(main_adapter);
                    sub_adapter=new SubArray_adapter(getApplicationContext(),SubList);
                    notification_listview.setAdapter(sub_adapter);
                } else {
                    sub_adapter.notifyDataSetChanged();
                    main_adapter.notifyDataSetChanged();
                }
            } catch (JSONException e1) {
                e1.printStackTrace();
            }
            pDialog.dismiss();
        }
        public String getJSONFromUrl(String url, List<NameValuePair> params) {
            InputStream is = null;
            String json = "";
            // Making HTTP request
            try {
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        is, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                    //sb.append(line + "\n");
                }
                is.close();
                json = sb.toString();
                Log.e("JSON", json);
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }
            return json;
        }
    }
but in this i just get two record of subarray. What should i do to get output as shown in image. Thanks in advance.
JSON response:
  {
   "status":1,
   "data":[
      {
         "iMainServiceId":1,
         "main":"NAILS",
         "sub":[
            {
               "iSubServiceId":1,
               "vName":"Manicure",
               "fPrice":15,
               "vDuration":"20 Minutes"
            },
            {
               "iSubServiceId":2,
               "vName":"Gel Manicure",
               "fPrice":25,
               "vDuration":"30 Minutes"
            },
            {
               "iSubServiceId":5,
               "vName":"Nail art ",
               "fPrice":10,
               "vDuration":"20 Minutes"
            },
            {
               "iSubServiceId":6,
               "vName":"Nail Pain ",
               "fPrice":10,
               "vDuration":"20 Minutes"
            }
         ]
      },
      {
         "iMainServiceId":2,
         "main":"HAIR",
         "sub":[
            {
               "iSubServiceId":3,
               "vName":"Haircuts",
               "fPrice":20,
               "vDuration":"30 Minutes"
            },
            {
               "iSubServiceId":4,
               "vName":"Hair color",
               "fPrice":50,
               "vDuration":"60 Minutes"
            },
            {
               "iSubServiceId":7,
               "vName":"Textures",
               "fPrice":20,
               "vDuration":"30 Minutes"
            },
            {
               "iSubServiceId":8,
               "vName":"Treatments",
               "fPrice":30,
               "vDuration":"60 Minutes"
            }
         ]
      },
      {
         "iMainServiceId":3,
         "main":"Face",
         "sub":[
            {
               "iSubServiceId":9,
               "vName":"Facials",
               "fPrice":20,
               "vDuration":"49 Minutes"
            },
            {
               "iSubServiceId":10,
               "vName":"Brow Bar",
               "fPrice":40,
               "vDuration":"49 Minutes"
            },
            {
               "iSubServiceId":11,
               "vName":"Makeup ",
               "fPrice":40,
               "vDuration":"49 Minutes"
            }
         ]
      },
      {
         "iMainServiceId":4,
         "main":"Body",
         "sub":[
            {
               "iSubServiceId":12,
               "vName":"Hair Removal",
               "fPrice":40,
               "vDuration":"49 Minutes"
            },
            {
               "iSubServiceId":13,
               "vName":"Body Treatments",
               "fPrice":30,
               "vDuration":"30 Minutes"
            }
         ]
      }
   ]
}
and wt i get as enter image description hereoutput is:

 
    