我如何从 JSON 获取国家和州并在 Spinner 上填充它

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

我有国家和州的 JSON 格式,如何在一个 Spinner 中添加国家并在另一个微调器中获得相应的州 ,我的JSON 县和州的格式为:

[
  {
    "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"
    ]
},

我搜索了很多资源,但找不到执行上述方法的正确方法。每个人都通过在自定义数组中添加国家来做这件事,请帮我解决这个问题。

我已经实施了相同的方法来查找省份的语言环境。本例使用3个spinner.you可以根据需要使用

 //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);
            }

        }

您需要执行以下步骤,

  1. 从json、
  2. 获取数据
  3. 添加国家/地区数组并添加来自 json
  4. 的数组状态
  5. 现在,OnItemSelected国家地位相应绑定国家

EX:

//Setting Adapter for country spinner 

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

setOnItemSelectedListener country spinner 获得状态

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) {

            }
        });