0

I have parsed json data in which there is a main json array and it contains sub json array. But the main json array not containing the sub json array in every item. So i have parsed all the data accroding to it. and i am getting perfect data from it. But the problem is that the main json array data is displaying in listview and after click on list view item the sub json array is display accroding to main json array item but its only get the last element of sub json array from hash map array list. So i can't get proper way to display so please find out some standard solution.

Here is My Code

public class MainCategories extends Fragment {
WebserviceClass wservice = new WebserviceClass();
Context c;
View v;
String data = "";
String User_id, countryid;
JSONObject jobj;
JSONArray datas;
int currentpage = 1;
ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
// testAdapter adapter
ArrayList<Allcategories> listing = new ArrayList<Allcategories>();;
public static ArrayList<subCateData> subList = new ArrayList<subCateData>();
int limit = 3, id;
Button bt1, bt2, bt3;
String img, img1;
String name, count;
String subname, subcount, subCategoryId;
View fragmentview;
ListView lv1, lv2, lv3;
JSONObject ca;
MainTest test;
String url, main, subnameData, subCountData, subID, cateGoryID;
LinearLayout ll;
ProgressDialog pDialog;
HashMap<String, String> map;
JSONArray dataa;
// SimpleAdapter adp;
Button b1, b2, b3;

public MainCategories(Context mainActivity, int id) {
    // TODO Auto-generated constructor stub
    this.c = mainActivity;
    this.id = id;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    SharedPreferences sp = c.getSharedPreferences("key", 0);
    User_id = sp.getString("userid=", User_id);
    countryid = sp.getString("countryid", countryid);
    v = inflater.inflate(R.layout.categories_tab, container, false);
    lv2 = (ListView) v.findViewById(android.R.id.list);

    if (FirstTab.adp == null) {
        new CategoryTest().execute();
    } else {
        lv2.setAdapter(FirstTab.adp);
    }

    lv2.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            for (int i = 0; i < subList.size(); i++) {
                subID = subList.get(i).getsubcatId();
                subnameData = subList.get(i).getsubcatname();
                subCountData = subList.get(i).getsubcatcount();

                Log.v("ALLDATA", subnameData + "/" + "/" + "/"
                        + subCountData);
            }


            String catid = listing.get(position).getCategoryid();
            int mycatID = Integer.parseInt(catid);
            Log.v("CAtegory ID", mycatID + "");

            addfragment(new CategoriesListClick(c, subID, mycatID,
                    subnameData, subCountData, position), true,
                    FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

        }
    });
    return v;
}

public class CategoryTest extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        url = String.format(Common.view_main_category + "country_id=%s",
                countryid);
        Log.v("CateGory URL:", url);
        jobj = wservice.getjson(url);

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub

        super.onPostExecute(result);

        try {

            JSONObject jdata = jobj.getJSONObject("data");

            datas = jdata.getJSONArray("allcategories");

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

                Log.e("length", "" + datas.length());
                ca = datas.getJSONObject(i);

                cateGoryID = ca.getString("categoryid");
                name = ca.getString("categoryname");
                count = ca.getString("categorystorecount");

                // map = new HashMap<String, String>();

                // map.put("categoryname", name);
                // map.put("categorystorecount", "(" + count + ")");
                // String countc=c.getString("categoryid");

                Log.e(name, count);

                if (ca.has("subcategories")) {
                    dataa = ca.getJSONArray("subcategories");
                    for (int j = 0; j < dataa.length(); j++) {

                        JSONObject d = dataa.getJSONObject(j);
                        // subList = new ArrayList<subCateData>();
                        subCategoryId = d.getString("subcategoryid");
                        subname = d.getString("subcategoryname");
                        subcount = d.getString("subcategorystorecount");

                        // map.put("subcategoryid", subCategoryId);
                        // map.put("subcategoryname", subname);
                        // map.put("subcategorystorecount", "(" + subcount
                        // + ")");
                        subList.add(new subCateData(subCategoryId, subname,
                                subcount));
                        /*
                         * Log.v("This is Data for Sub:",
                         * map.get("subcategoryname").toString());
                         */

                    }

                } else {
                    System.out.println("JSONArray is null");
                }
                listing.add(new Allcategories(cateGoryID, name, count));

            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
        Log.v("Size", listing.size() + "");
        FirstTab.adp = new MyCustom(c, listing);

        lv2.setAdapter(FirstTab.adp);

    }
}

void addfragment(Fragment fragment, boolean addBacktoStack, int transition) {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.simple_fragment, fragment);
    ft.setTransition(transition);
    if (addBacktoStack)
        ft.addToBackStack(null);
    ft.commit();

}

class MyCustom extends BaseAdapter {

    Context Mcontext;
    ArrayList<Allcategories> thisCatList;
    LayoutInflater inflater;

    public MyCustom(Context c, ArrayList<Allcategories> listing) {
        // TODO Auto-generated constructor stub
        this.Mcontext = c;
        this.thisCatList = listing;
        inflater = LayoutInflater.from(Mcontext);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return thisCatList.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public View getView(int position, View v, ViewGroup parent) {

        if (v == null) {

            v = inflater.inflate(R.layout.list_categories, parent, false);
            TextView catName = (TextView) v.findViewById(R.id.txtcname);
            TextView catCount = (TextView) v.findViewById(R.id.txtccount);
            catName.setText(thisCatList.get(position).getCategoryname());
            catCount.setText("(" + ""
                    + thisCatList.get(position).getCategorystorecount()
                    + "" + ")");
            Log.v("CatCount", catCount.getText().toString());

        }
        // TODO Auto-generated method stub
        return v;
    }

}

class AllCategories Data:

public class Allcategories {
private String arabicname;
private String categoryid;
private String categoryname;
private String categorystorecount;
private String fatherid;
private String order;
private String status;

// private List subcategories;

public Allcategories(String name, String count) {
    // TODO Auto-generated constructor stub
    this.categoryname = name;
    this.categorystorecount = count;
}

public String getCategoryname() {
    return this.categoryname;
}

public void setCategoryname(String categoryname) {
    this.categoryname = categoryname;
}

public String getCategorystorecount() {
    return this.categorystorecount;
}

public void setCategorystorecount(String categorystorecount) {
    this.categorystorecount = categorystorecount;
}

SubCategory Data Class:

public class subCateData {

String subcatId, subcategoryname, subcategorystorecount;

public subCateData(String id, String name, String count) {
    // TODO Auto-generated constructor stub
    this.subcatId = id;
    this.subcategoryname = name;
    this.subcategorystorecount = count;
}

public String getsubcatId() {
    return this.subcatId;
}

public void setsubcatId(String subID) {
    this.subcatId = subID;
}

public String getsubcatname() {
    return this.subcategoryname;
}

public void setsubcatname(String name) {
    this.subcategoryname = name;
}

public String getsubcatcount() {
    return this.subcategorystorecount;
}

public void setsubcatcount(String count) {
    this.subcategorystorecount = count;
}

This is My Json parsing URL:

http://www.sevenstarinfotech.com/projects/demo/okaz/API/view_categories.php?country_id=4

Stack Trace:

06-27 12:23:34.361: V/ALLDATA(8533): High School///0
06-27 12:24:02.001: I/Adreno200-EGLSUB(8533): <ConfigWindowMatch:2218>: Format RGBA_8888.
06-27 12:24:02.011: D/memalloc(8533): /dev/pmem: Mapped buffer base:0x53153000 size:1536000 offset:0 fd:74
06-27 12:24:02.041: D/memalloc(8533): /dev/pmem: Mapped buffer base:0x54048000 size:15683584 offset:14147584 fd:80
06-27 12:24:02.091: D/OpenGLRenderer(8533): Flushing caches (mode 0)
06-27 12:24:02.111: D/memalloc(8533): /dev/pmem: Unmapping buffer base:0x51b26000 size:3072000 offset:1536000
06-27 12:24:02.121: D/memalloc(8533): /dev/pmem: Unmapping buffer base:0x552a2000 size:9093120 offset:7557120
06-27 12:24:02.121: D/memalloc(8533): /dev/pmem: Unmapping buffer base:0x55b4e000 size:17219584 offset:15683584
06-27 12:24:03.081: D/CLIPBOARD(8533): Hide Clipboard dialog at Starting input: finished by someone else... !
06-27 12:24:03.141: D/OpenGLRenderer(8533): Flushing caches (mode 0)
06-27 12:24:03.141: D/memalloc(8533): /dev/pmem: Unmapping buffer base:0x53153000 size:1536000 offset:0
06-27 12:24:03.141: D/memalloc(8533): /dev/pmem: Unmapping buffer base:0x54048000 size:15683584 offset:14147584
06-27 12:24:03.441: D/OpenGLRenderer(8533): Flushing caches (mode 2)
Shani Goriwal
  • 2,111
  • 1
  • 18
  • 30

1 Answers1

0

you should have to put new HashMap inside your current HasHMap so you can get subcategories items for particular index.

see this for how to use nested HashMap? and use it in subcategories loop.

i am using ArrayList of getter setter class to bind the data. so if you can convert your code into arraylist and edit the question that will be a great..

and see below code

import java.util.ArrayList;

public class MainCategories extends Fragment {
WebserviceClass wservice = new WebserviceClass();
Context c;
View v;
String data = "";
String User_id, countryid;
JSONObject jobj;
JSONArray datas;
int currentpage = 1;
ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
// testAdapter adapter
ArrayList<Allcategories> listing = new ArrayList<Allcategories>();;
public static ArrayList<subCateData> subList = new ArrayList<subCateData>();
int limit = 3, id;
Button bt1, bt2, bt3;
String img, img1;
String name, count;
String subname, subcount, subCategoryId;
View fragmentview;
ListView lv1, lv2, lv3;
JSONObject ca;
MainTest test;
String url, main, subnameData, subCountData, subID, cateGoryID;
LinearLayout ll;
ProgressDialog pDialog;
HashMap<String, String> map;
JSONArray dataa;
// SimpleAdapter adp;
Button b1, b2, b3;
/// sanket 
 ArrayList<Allcategories> list = new ArrayList<Allcategories>(); 

public MainCategories(Context mainActivity, int id) {
// TODO Auto-generated constructor stub
this.c = mainActivity;
this.id = id;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
// TODO Auto-generated method stub
SharedPreferences sp = c.getSharedPreferences("key", 0);
User_id = sp.getString("userid=", User_id);
countryid = sp.getString("countryid", countryid);
v = inflater.inflate(R.layout.categories_tab, container, false);
lv2 = (ListView) v.findViewById(android.R.id.list);

if (FirstTab.adp == null) {
    new CategoryTest().execute();
} else {
    lv2.setAdapter(FirstTab.adp);
  }

lv2.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

        for (int i = 0; i < subList.size(); i++) {
            subID = list.get(position).get(i).getList().getsubcatId();
            subnameData = list.get(position).get(i).getList().getsubcatname();
            subCountData = list.get(position).get(i).getList().getsubcatcount();

            Log.v("ALLDATA", subnameData + "/" + "/" + "/"
                    + subCountData);
        }


        String catid = listing.get(position).getCategoryid();
        int mycatID = Integer.parseInt(catid);
        Log.v("CAtegory ID", mycatID + "");

        addfragment(new CategoriesListClick(c, subID, mycatID,
                subnameData, subCountData, position), true,
                FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

    }
});
return v;
}

public class CategoryTest extends AsyncTask<String, Integer, String> {

@Override
protected String doInBackground(String... params) {
    // TODO Auto-generated method stub

    url = String.format(Common.view_main_category + "country_id=%s",
            countryid);
    Log.v("CateGory URL:", url);
    jobj = wservice.getjson(url);

    return null;
}

@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub

    super.onPostExecute(result);

    try {

        JSONObject jdata = jobj.getJSONObject("data");

        datas = jdata.getJSONArray("allcategories");

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

            // sanket 
            Allcategories binAll = new Allcategories();

            Log.e("length", "" + datas.length());
            ca = datas.getJSONObject(i);

            cateGoryID = ca.getString("categoryid");
            name = ca.getString("categoryname");
            count = ca.getString("categorystorecount");

            // map = new HashMap<String, String>();

            // map.put("categoryname", name);
            // map.put("categorystorecount", "(" + count + ")");
            // String countc=c.getString("categoryid");

            //sanket
            binAll.setcategoryid(cateGoryID);
            binAll.setcategoryname(name);
            binAll.setcategorystorecount(count);

            Log.e(name, count);

            if (ca.has("subcategories")) {
                dataa = ca.getJSONArray("subcategories");
                for (int j = 0; j < dataa.length(); j++) {

                    JSONObject d = dataa.getJSONObject(j);
                    // subList = new ArrayList<subCateData>();
                    subCategoryId = d.getString("subcategoryid");
                    subname = d.getString("subcategoryname");
                    subcount = d.getString("subcategorystorecount");

                    // map.put("subcategoryid", subCategoryId);
                    // map.put("subcategoryname", subname);
                    // map.put("subcategorystorecount", "(" + subcount
                    // + ")");

                    //// sanket
                    ArrayList<subCateData> sublist = new ArrayList<subCateData>();
                    subCateData binSub = new subCateData();

                    binSub.setsubcatId(subCategoryId);
                    binSub.setsubcatname(subname);
                    binSub.setsubcatcount(subcount);



                    subList.add(new subCateData(subCategoryId, subname,
                            subcount));
                    /*
                     * Log.v("This is Data for Sub:",
                     * map.get("subcategoryname").toString());
                     */
                    sublist.add(binSub);

                }
                /// sanket  note : make arraylist of subdata in Allcategories class and generate getter and settter   

                binAll.setList(sublist);

            } else {
                System.out.println("JSONArray is null");
            }
            listing.add(new Allcategories(cateGoryID, name, count));
            list.add(binAll);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.v("Size", listing.size() + "");
    FirstTab.adp = new MyCustom(c, listing);

    lv2.setAdapter(FirstTab.adp);

}
}

 void addfragment(Fragment fragment, boolean addBacktoStack, int transition) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.simple_fragment, fragment);
ft.setTransition(transition);
if (addBacktoStack)
    ft.addToBackStack(null);
ft.commit();

}

 class MyCustom extends BaseAdapter {

Context Mcontext;
ArrayList<Allcategories> thisCatList;
LayoutInflater inflater;

public MyCustom(Context c, ArrayList<Allcategories> listing) {
    // TODO Auto-generated constructor stub
    this.Mcontext = c;
    this.thisCatList = listing;
    inflater = LayoutInflater.from(Mcontext);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return thisCatList.size();
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}

@Override
public View getView(int position, View v, ViewGroup parent) {

    if (v == null) {

        v = inflater.inflate(R.layout.list_categories, parent, false);
        TextView catName = (TextView) v.findViewById(R.id.txtcname);
        TextView catCount = (TextView) v.findViewById(R.id.txtccount);
        catName.setText(thisCatList.get(position).getCategoryname());
        catCount.setText("(" + ""
                + thisCatList.get(position).getCategorystorecount()
                + "" + ")");
        Log.v("CatCount", catCount.getText().toString());

    }
    // TODO Auto-generated method stub
    return v;
}

}
Community
  • 1
  • 1
Sanket Kachhela
  • 10,861
  • 8
  • 50
  • 75
  • I have implemented like this which you sad earlier but i couldn't get right way...so please tell me that where i have to need to change in my code – Shani Goriwal Jun 25 '13 at 09:12
  • HashMap map...... this means i have to change this hashmap arraylist to arraylist of string?? – Shani Goriwal Jun 25 '13 at 09:43
  • Yes.... i have done it and i am getting all data...But whenever i have printed in log then it was displaying me only one last item for subcategories. – Shani Goriwal Jun 26 '13 at 10:16
  • On List Item click Log.v("ALL DATA"); – Shani Goriwal Jun 26 '13 at 11:35
  • Yes..My friend I have seen your answers...But still i can't get all data from subcategories...It just display last items.. In log the value for "ALL DATA": High School(0) which is the last item of subcategory... I have also implemented the getter setter but though it displayed last item..so this is my issues.... – Shani Goriwal Jun 27 '13 at 06:56
  • You can see in log cat for ALL DATA – Shani Goriwal Jun 27 '13 at 07:07