How can i get countries and states from JSON and populate it on Spinner

家住魔仙堡 提交于 2019-12-11 05:27:25

问题


I have the JSON format of countries and states, how can i add countries in one Spinner and get corresponding state in another spinner, my JSON format of counties and state is:

[
  {
    "Country": "Afghanistan",
    "State": [
        "Badakhshan",
        "Badgis",
        "Baglan",
        "Balkh",
        "Bamiyan",
        "Farah",
        "Faryab",
        "Gawr",
        "Gazni",
        "Herat",
        "Hilmand",
        "Jawzjan",
        "Kabul",
        "Kapisa",
        "Khawst",
        "Kunar",
        "Lagman",
        "Lawghar",
        "Nangarhar",
        "Nimruz",
        "Nuristan",
        "Paktika",
        "Paktiya",
        "Parwan",
        "Qandahar",
        "Qunduz",
        "Samangan",
        "Sar-e Pul",
        "Takhar",
        "Uruzgan",
        "Wardag",
        "Zabul"
    ]
},
{
    "Country": "Albania",
    "State": [
        "Badakhshan",
        "Badgis",
        "Baglan",
        "Balkh",
        "Bamiyan",
        "Farah",
        "Faryab",
        "Gawr",
        "Gazni",
        "Herat",
        "Hilmand",
        "Jawzjan",
        "Kabul",
        "Kapisa",
        "Khawst",
        "Kunar",
        "Lagman",
        "Lawghar",
        "Nangarhar",
        "Nimruz",
        "Nuristan",
        "Paktika",
        "Paktiya",
        "Parwan",
        "Qandahar",
        "Qunduz",
        "Samangan",
        "Sar-e Pul",
        "Takhar",
        "Uruzgan",
        "Wardag",
        "Zabul",
        "Berat",
        "Bulqize",
        "Delvine",
        "Devoll",
        "Dibre",
        "Durres",
        "Elbasan",
        "Fier",
        "Gjirokaster",
        "Gramsh",
        "Has",
        "Kavaje",
        "Kolonje",
        "Korce",
        "Kruje",
        "Kucove",
        "Kukes",
        "Kurbin",
        "Lezhe",
        "Librazhd",
        "Lushnje",
        "Mallakaster",
        "Malsi e Madhe",
        "Mat",
        "Mirdite",
        "Peqin",
        "Permet",
        "Pogradec",
        "Puke",
        "Sarande",
        "Shkoder",
        "Skrapar",
        "Tepelene",
        "Tirane",
        "Tropoje",
        "Vlore"
    ]
},

I search on many resources but i cant find proper way to do the above method. Everyone doing it on by adding the countries in custom array, please help me to solve this problem.


回答1:


you need to do following steps,

  1. get data from json,
  2. add array of country and add array state from json
  3. now, OnItemSelected of country position bind state accordingly

EX:

//Setting Adapter for country spinner 

        if (stateDataList != null && stateDataList.size() > 0) {
                StateSpinnerAdapter StateAdapter = new StateSpinnerAdapter(this, stateDataList);
                SpinState.setAdapter(StateAdapter);
            }

than setOnItemSelectedListener country spinner to get states

private ArrayList<ModelStateDetails> stateDataList;

        SpinState.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
                if (position > 0) {
                    new LongOperation().execute("" + position);
                    Log.e(5, "state code", "-->>" + position);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });



回答2:


i have implemented same for finding locale in provience. This example uses 3 spinner.you can use according to your need.

 //set onItemSelected Listener


           spinProvince.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    String province = (String)parent.getItemAtPosition(position);

                    if(province.matches("Eastern Cape")){
                        spinPro = 1;
                        populateDist();
                    }
                    else if(province.matches("Free State")){
                        spinPro = 2;
                        populateDist();
                    }
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    Toast.makeText(Reg_Prop.this, "Please select the Province where the Property is located", Toast.LENGTH_LONG).show();

                }
            });

            spinDistrict.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){

                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    String spinDist = (String)parent.getItemAtPosition(position);

                    if(spinDist.matches("Buffalo City") && spinPro == 1){
                        dist = 1;
                        populateLocal();
                    }
                    else if(spinDist.matches("Nelson Mandela Bay") && spinPro == 1){
                        dist = 2;
                        populateLocal();
                    }
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {

                }
            });

   /* Functions to populate the spinners*/

        void populateDist(){
            //Eatern Cape
            if(spinPro == 1){
                String [] ec = {"Select District/Metro *", "Buffalo City", "Nelson Mandela Bay",
                        "Alfred Nzo District", "Amathole District", "Chris Hani District",
                        "Joe Gqabi District", "OR Tambo District", "Cacadu District"};

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ec);
                spinDistrict.setAdapter(adapter);
            }
            //Free State
            else if(spinPro == 2){
                String [] fs = {"Select District/Metro *", "Mangaung Metropolitan", "Fezile Dabi District",
                        "Lejweleputswa District", "Thabo Mofutsanyana District", "Xhariep District"};

                ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, fs);
                spinDistrict.setAdapter(adapter2);
            }

        }

        void populateLocal(){
            //Baffalo City
            if(dist == 1){
                String [] bc = {"Buffalo City"};

                ArrayAdapter<String> adapterL1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, bc);
                spinLocal.setAdapter(adapterL1);
            }
            //Nelson Mandela Bay
            else if(dist == 2){
                String [] nmb = {"Nelson Mandela Bay"};

                ArrayAdapter<String> adapterL2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, nmb);
                spinLocal.setAdapter(adapterL2);
            }

        }


来源:https://stackoverflow.com/questions/39405148/how-can-i-get-countries-and-states-from-json-and-populate-it-on-spinner

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!