Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在两个spinner+android中设置json文件数据?_Android_Json - Fatal编程技术网

如何在两个spinner+android中设置json文件数据?

如何在两个spinner+android中设置json文件数据?,android,json,Android,Json,Json文件: { "Iraq":["Baghdad","Karkh","Sulaymaniyah","Kirkuk","Erbil","Basra","Bahr","Tikrit","Najaf","Al Hillah","Mosul","Haji Hasan","Al `Amarah","Basere","Manawi","Hayat"], "Lebanon":["Beirut","Zgharta","Bsalim","Halba","Ashrafiye","Sidon","Dik el

Json文件:

{
"Iraq":["Baghdad","Karkh","Sulaymaniyah","Kirkuk","Erbil","Basra","Bahr","Tikrit","Najaf","Al Hillah","Mosul","Haji Hasan","Al `Amarah","Basere","Manawi","Hayat"],

 "Lebanon":["Beirut","Zgharta","Bsalim","Halba","Ashrafiye","Sidon","Dik el Mehdi","Baalbek","Tripoli","Baabda","Adma","Hboub","Yanar","Dbaiye","Aaley","Broummana","Sarba","Chekka"]
}
我需要在第一个微调器中显示国家名称,在第二个微调器中根据所选微调器的国家/地区显示城市名称

如何在android上编码

我的代码:

公共类搜索房间扩展活动{

JSONObject jsonobject;
JSONArray jsonarray;
ProgressDialog mProgressDialog;
ArrayList<String> worldlist;
ArrayList<CollegeList> world;
String value,key;
List<String> al;
ArrayAdapter<String> adapter;
HashMap<String, String> m_li  = new HashMap<String, String>();
public  ArrayList<SpinnerModel> CustomListViewValuesArr = new ArrayList<SpinnerModel>();
CustomAdapterStatus customAdapter;
Search_for_room activity = null;
Spinner spinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search_for_room);
    activity = this;
    ArrayList<String> items=getCountries("countriesToCities.json");
    spinner=(Spinner)findViewById(R.id.spCountry);
    spinnerCity=(Spinner)findViewById(R.id.spCity);
}

private ArrayList<String> getCountries(String fileName){
    JSONArray jsonArray=null;
    ArrayList<String> cList=new ArrayList<String>();
    try {
        InputStream is = getResources().getAssets().open(fileName);
        int size = is.available();
        byte[] data = new byte[size];
        is.read(data);
        is.close();
        String json = new String(data, "UTF-8");
        JSONObject jsonObj = new JSONObject(json);

       // JSONObject resultObject = jsonObj.getJSONObject("result");
        System.out.print("======Key: "+jsonObj);

        Iterator<String> stringIterator = jsonObj.keys();
        while(stringIterator.hasNext()) {
            key = stringIterator.next();
            value = jsonObj.getString(key);
            System.out.println("------------"+key);
            m_li.put(key,value);
            al = new ArrayList<String>(m_li.keySet());

            final SpinnerModel sched = new SpinnerModel();

            /******* Firstly take data in model object ******/
            sched.setCountryName(value);
            //   sched.setImage(key);
            sched.setStates(key);

            /******** Take Model Object in ArrayList **********/
            CustomListViewValuesArr.add(sched);
            Resources res = getResources();
            customAdapter = new CustomAdapterStatus(activity, R.layout.spinner_item, CustomListViewValuesArr,res);
            spinner.setAdapter(adapter);
        }
    }catch (JSONException ex){
        ex.printStackTrace();
        /*jsonArray=new JSONArray(json);
        if (jsonArray != null) {
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jobj = jsonArray.getJSONObject(i);
                System.out.pri
                //cList.add(String.valueOf(jobj.keys()));
            }
        }*/
    }catch (IOException e){
        e.printStackTrace();
    }
    return cList;
}
}

试试这段代码,它可以帮助你


如果有任何查询,请询问我

在微调器中添加菜单项

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/spinner"
        android:title="Select Week"
        app:actionViewClass="android.widget.Spinner"
        android:textColor="@android:color/white"
        android:textSize="11dp"
        app:showAsAction="always" />
</menu>
将json添加到数组列表中

 public void onPostExecute(String response) {
        try {
            list.clear();
            MatchData vid = null;
            Gson gson = new Gson();
            JSONObject object = new JSONObject(response);
            JSONArray array = object.getJSONArray("items");
            for (int i = 0; i < array.length(); i++) {
                vid = gson.fromJson(array.getJSONObject(i).toString(), MatchData.class);

                list.add(vid);
            }
            matchDataAdapter = new MatchDataAdapter(MainActivity.this, list);
            mRecyclerView.setAdapter(matchDataAdapter);

        } catch (JSONException e) {
            e.printStackTrace();
        }
}
最后将适配器设置为微调器

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.android_action_bar_spinner_menu, menu);
        MenuItem item = menu.findItem(R.id.spinner);
        Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);  

        **ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, lists);**
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(dataAdapter);

        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selected = (String) parent.getSelectedItem();
                Toast.makeText(getApplicationContext(),selected,Toast.LENGTH_LONG).show();
                week = Integer.parseInt(selected);
                requestforinfo();
            }

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

            }
        });
        return true;
    }

你现在一切都做对了。只要提出我的建议,就可以使用一长串JSON数据

首先,通过在顶部声明,使整个活动/片段都可以访问文件的JSON响应

添加以下函数以检索特定国家/地区的城市列表:

private ArrayList<String> getCityList(String countryName){
    ArrayList<String> cityList = new ArrayList<>();

    //Here jsonObj is the your JSON response from the file.
    try {
        JSONArray jArray =jsonObj.getJSONArray(countryName);

        for(int i=0;i<jArray.length();i++){
            cityList.add(jArray.getString(i));
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return cityList;
}
然后添加spinnerItemSelected调用以下函数:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String selected = ((SpinnerModel) parent.getSelectedItem()).getCountryName();

         //For sake of your answer I had used String Array and ArrayAdapter. You can modify as you want.
           ArrayAdapter<String> cityAdapter = new ArrayAdapter<String>(YourActivity.this, R.layout.single_textview,getCityList(selected));
           spinnerCity.setAdapter(cityAdapter);
        }

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

        }
    });

到目前为止你尝试了什么?我更新了我的问题和广告代码,以便你能看到它并回复我吗?我想在spinner中添加国家名称,并在此基础上设置城市名称。这里只有两个国家,例如json,但json中有许多长列表,发送所有json,上面的代码是jsut sample hoe从assetscan读取json您的共享所有jsonJson文件数据都要记录几乎190个国家的列表,所以我无法对此提出质疑,但我在我的问题中分享了json文件的演示。请检查邮件,我将它发送给您
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String selected = ((SpinnerModel) parent.getSelectedItem()).getCountryName();

         //For sake of your answer I had used String Array and ArrayAdapter. You can modify as you want.
           ArrayAdapter<String> cityAdapter = new ArrayAdapter<String>(YourActivity.this, R.layout.single_textview,getCityList(selected));
           spinnerCity.setAdapter(cityAdapter);
        }

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

        }
    });