All my spinners are connected with each other, they are not independent, I would like to show options in spinner2 and spinner3 based on the selection in spinner1 (I mean based on category chosen by user in spinner1)
In onCreate I am populating data into Spinners, but in spinner2 and spinner3 I am getting data that belongs to CategoryB whereas they must populate with CategoryA data only.
So where is my mistake? Here is my JSON Parsing code:
               categoryArrayList = new ArrayList<Category>();
               cArrayList = new ArrayList<String>();
                ...................................
                // Array Level 1 --- START
            JSONArray jarray = jsono.getJSONArray("categories");
            for (int i = 0; i < jarray.length(); i++) {
                JSONObject object = jarray.getJSONObject(i);
                Category language = new Category();                     
                language.setName(object.getString("category_name"));
                Log.d("category_name::-", object.getString("category_name"));
                language.setTypeArrayList(typeArrayList);
                categoryArrayList.add(language);
                cArrayList.add(categoryArrayList.get(i).getName());
                // Array Level 1 --- END
                // Array Level 2 --- START
                JSONArray jsarray = object.getJSONArray("types");
                typeArrayList = new ArrayList<Type>();
                tArrayList = new ArrayList<String>();
                for (int j = 0; j < jsarray.length(); j++) {
                    JSONObject jjobject = jsarray.getJSONObject(j);
                    Type genre = new Type();
                    genre.setName(jjobject.getString("type_name"));
                    Log.d("type_name::-", jjobject.getString("type_name"));     
                    genre.setServiceArrayList(serviceArrayList);
                    typeArrayList.add(genre);
                    tArrayList.add(typeArrayList.get(j).getName());     
                    // Array Level 2 --- END
                    // Array Level 3 --- START
                    JSONArray jsonarray = jjobject.getJSONArray("services");
                    serviceArrayList = new ArrayList<Service>();
                    sArrayList = new ArrayList<String>();
                    for (int k = 0; k < jsonarray.length(); k++) {
                        JSONObject jjjobject = jsonarray.getJSONObject(k);
                        Service movie = new Service();
                        movie.setName(jjjobject.getString("service_name"));
                        Log.d("service_name::-", jjjobject.getString("service_name"));
                        serviceArrayList.add(movie);    
                        sArrayList.add(serviceArrayList.get(k).getName());
                        // Array Level 3 --- END
                    }
                }       
            }
            return true;
        }
And here is how i am populating Spinners:
            spinner1.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                     android.R.layout.simple_spinner_dropdown_item,
                     cArrayList));
            spinner2.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item,
                    tArrayList));
            spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item,
                    sArrayList));
                Oreo. Here is the full code.
Category class
public class Category {
    String name;
    ArrayList<ArrayList<Type>> type;
    Category()
    {
        name = "";
        type = new ArrayList<ArrayList<Type>>(); 
    }
    void setName(String s)
    {
        name =s;
    }
    public String getName()
    {
        return name;
    }
    void setTypeArrayList(ArrayList<Type> serviceArrayList)
    {
        type.add(serviceArrayList);
    }
    ArrayList<Type> getTypeArrayList(int i)
    {
        return type.get(i);
    }
}
Type class
import java.util.ArrayList;
public class Type {
    String type;
    ArrayList<ArrayList<Service>> service;
    public Type() {
        // TODO Auto-generated constructor stub
        type = "";
        service = new ArrayList<ArrayList<Service>>();
    }
    void setName(String s)
    {
        type =s;
    }
    public String getName()
    {
        return type;
    }
    void setServiceArrayList(ArrayList<Service> serviceArrayList)
    {
        service.add(serviceArrayList);
    }
    ArrayList<Service> getServiceArrayList(int i)
    {
        return service.get(i);
    }
}
Service class
public class Service {
    String service;
    public Service() {
        // TODO Auto-generated constructor stub
        service ="";
    }
    void setName(String s)
    {
        service =s;
    }
    public String getName()
    {
        return service;
    }
}
initialize global
 int catpos =0;
 ArrayList<Category> categoryArrayList = new ArrayList<Category>();
 ArrayList<String> cArrayList = new ArrayList<String>();
 ArrayList<Type> typeArrayList;
 ArrayList<Service> serviceArrayList;
doInbackground
    //your http request and response process
    JSONObject jsono;
    try {
        jsono = new JSONObject(data);
        JSONArray jarray = jsono.getJSONArray("categories");
        for (int i = 0; i < jarray.length(); i++) {
            JSONObject object = jarray.getJSONObject(i);
            Category language = new Category();
            language.setName(object.getString("category_name"));
            Log.d("category_name::-", object.getString("category_name"));
            JSONArray jsarray = object.getJSONArray("types");
            typeArrayList = new ArrayList<Type>();
            tArrayList = new ArrayList<String>();
            for (int j = 0; j < jsarray.length(); j++) {
                JSONObject jjobject = jsarray.getJSONObject(j);
                Type genre = new Type();
                genre.setName(jjobject.getString("type_name"));
                Log.d("type_name::-", jjobject.getString("type_name"));
                JSONArray jsonarray = jjobject.getJSONArray("services");
                serviceArrayList = new ArrayList<Service>();
                sArrayList = new ArrayList<String>();
                for (int k = 0; k < jsonarray.length(); k++) {
                    JSONObject jjjobject = jsonarray.getJSONObject(k);
                    Service movie = new Service();
                    movie.setName(jjjobject.getString("service_name"));
                    Log.d("service_name::-",
                            jjjobject.getString("service_name"));
                    serviceArrayList.add(movie);
                    sArrayList.add(serviceArrayList.get(k).getName());
                }
                genre.setServiceArrayList(serviceArrayList);
                typeArrayList.add(genre);
                tArrayList.add(typeArrayList.get(j).getName());
            }
            language.setTypeArrayList(typeArrayList);
            categoryArrayList.add(language);
            cArrayList.add(categoryArrayList.get(i).getName());
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
onPostExecute Method
    tArrayList = new ArrayList<String>();
    sArrayList = new ArrayList<String>();
    Category c = categoryArrayList.get(0);      
    typeArrayList = c.getTypeArrayList(0);
    for(int i=0;i<typeArrayList.size();i++)
        tArrayList.add(typeArrayList.get(i).getName());
    Type t = typeArrayList.get(0);
    serviceArrayList = t.getServiceArrayList(0);
    for(int i=0;i<serviceArrayList.size();i++)
        sArrayList.add(serviceArrayList.get(i).getName());
    spinner1.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
            android.R.layout.simple_spinner_dropdown_item, cArrayList));
    spinner2.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
            android.R.layout.simple_spinner_dropdown_item, tArrayList));
    spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
            android.R.layout.simple_spinner_dropdown_item, sArrayList));
    spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {
            catpos = pos;
            tArrayList = new ArrayList<String>();
            sArrayList = new ArrayList<String>();
            Category c = categoryArrayList.get(pos);        
            typeArrayList = c.getTypeArrayList(0);
            for(int i=0;i<typeArrayList.size();i++)
                tArrayList.add(typeArrayList.get(i).getName());
            Type t = typeArrayList.get(0);
            serviceArrayList = t.getServiceArrayList(0);
            for(int i=0;i<serviceArrayList.size();i++)
                sArrayList.add(serviceArrayList.get(i).getName());
            spinner2.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item, tArrayList));
            spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item, sArrayList));
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });
    spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {
            sArrayList = new ArrayList<String>();
            Category c = categoryArrayList.get(catpos);     
            typeArrayList = c.getTypeArrayList(0);              
            Type t = typeArrayList.get(pos);
            serviceArrayList = t.getServiceArrayList(0);
            for(int i=0;i<serviceArrayList.size();i++)
                sArrayList.add(serviceArrayList.get(i).getName());
            spinner3.setAdapter(new ArrayAdapter<String>(CategoryActivity.this,
                    android.R.layout.simple_spinner_dropdown_item, sArrayList));                
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });
                        This should do what you want, however, I am not sure why you are reading a json, but you seems to know the content already. i.e. you want something so specific in spinner 3
           categoryArrayList = new ArrayList<Category>();
           cArrayList = new ArrayList<String>();
            ...................................
            JSONArray jarray = jsono.getJSONArray("categories");
            for (int i = 0; i < jarray.length(); i++) {
                JSONObject object = jarray.getJSONObject(i);
                Category language = new Category();                     
                language.setName(object.getString("category_name"));
                Log.d("category_name::-", object.getString("category_name"));
                language.setTypeArrayList(typeArrayList);
                categoryArrayList.add(language);
                cArrayList.add(categoryArrayList.get(i).getName());
            }
            JSONArray jsarray = jarray.getJSONObject(0).getJSONArray("types");
            typeArrayList = new ArrayList<Type>();
            tArrayList = new ArrayList<String>();
            for (int j = 0; j < jsarray.length(); j++) {
                JSONObject jjobject = jsarray.getJSONObject(j);
                Type genre = new Type();
                genre.setName(jjobject.getString("type_name"));
                Log.d("type_name::-", jjobject.getString("type_name"));                     
                genre.setServiceArrayList(serviceArrayList);
                typeArrayList.add(genre);
                tArrayList.add(typeArrayList.get(j).getName());         
            }       
            JSONArray jsonarray = jsarray.getJSONObject(1).getJSONArray("services");
            serviceArrayList = new ArrayList<Service>();
            sArrayList = new ArrayList<String>();
            for (int k = 0; k < jsonarray.length(); k++) {
                JSONObject jjjobject = jsonarray.getJSONObject(k);
                Service movie = new Service();
                movie.setName(jjjobject.getString("service_name"));
                Log.d("service_name::-", jjjobject.getString("service_name"));
                serviceArrayList.add(movie);    
                sArrayList.add(serviceArrayList.get(k).getName());
            }
            return true;
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With