如何在微调器中加载替换json值?

时间:2015-12-24 06:03:58

标签: android json android-spinner

我是android的新手,我有一个应用程序,在我的应用程序中我获取用户的个人资料数据,在我的个人资料数据中我得到用户之前设置的用户状态和城市,就像现在用户设置以下状态和城市,我能够在我的微调器中显示那个州和城市

{

"user_city": "Kolkata",
"user_state": "West Bengal",

}

现在的问题是,如果用户想要改变状态,例如从WestBengal到Karnataka,那么我需要显示所有状态并让用户进行更改,所以为此我有其他单独的webservice加载所有状态,我想显示所有与旋转器相同的状态,但现在问题是我需要单击两次然后才显示所有状态

这是回复

[{"user_status":"1","state_id":"1","state":"Karnataka"},{"user_status":"1","state_id":"2","state":"Tamilnadu"},{"user_status":"1","state_id":"3","state":"Maharastra"},{"user_status":"1","state_id":"4","state":"Andhra Pradesh"},{"user_status":"1","state_id":"5","state":"West Bengal"},{"user_status":"1","state_id":"6","state":"Delhi"},{"user_status":"1","state_id":"8","state":"Andaman & Nicobar Islands"},{"user_status":"1","state_id":"9","state":"Arunachal Pradesh"},{"user_status":"1","state_id":"10","state":"Bihar"},{"user_status":"1","state_id":"11","state":"Chattisgarh"},{"user_status":"1","state_id":"12","state":"Dadra & Nagar Haveli"},{"user_status":"1","state_id":"13","state":"Daman & Diu"},{"user_status":"1","state_id":"14","state":"Goa"},{"user_status":"1","state_id":"15","state":"Gujarat"},{"user_status":"1","state_id":"16","state":"Haryana"},{"user_status":"1","state_id":"17","state":"Himachal Pradesh"},{"user_status":"1","state_id":"18","state":"Jharkhand"},{"user_status":"1","state_id":"19","state":"Kerala"},{"user_status":"1","state_id":"20","state":"Lakshadweep"},{"user_status":"1","state_id":"21","state":"Madhya pradesh"},{"user_status":"1","state_id":"22","state":"Pondichery"},{"user_status":"1","state_id":"23","state":"Punjab"},{"user_status":"1","state_id":"24","state":"Rajasthan"},{"user_status":"1","state_id":"25","state":"Sikkim"},{"user_status":"1","state_id":"26","state":"Telangana"},{"user_status":"1","state_id":"27","state":"Tripura"},{"user_status":"1","state_id":"28","state":"Uttaranchal"},{"user_status":"1","state_id":"29","state":"Uttar Pradesh"},{"user_status":"1","state_id":"31","state":"Nagaland"},{"user_status":"1","state_id":"32","state":"Mizoram"},{"user_status":"1","state_id":"33","state":"Meghalaya"},{"user_status":"1","state_id":"34","state":"Manipur"},{"user_status":"1","state_id":"35","state":"Assam"},{"user_status":"1","state_id":"36","state":"Chandigarh"},{"user_status":"1","state_id":"37","state":"Orissa"},{"user_status":"1","state_id":"38","state":"Others"}]

加载资料

class LoadAllProdetails extends
            AsyncTask<String, String, ArrayList<HashMap<String, String>>> {
        private ProgressDialog pDialog;
        private String test;
        private JSONObject jsonObjsss;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Profiles.this.getActivity());
            pDialog.setMessage("Please wait..");
            pDialog.setIndeterminate(true);
            pDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.custom_progress));
            pDialog.setCancelable(true);
            pDialog.show();
        }
        protected ArrayList<HashMap<String, String>> doInBackground(
                String... args) {
            ServiceHandler sh = new ServiceHandler();
            // Making a request to url and getting response

            String jsonStr = sh.makeServiceCall(GET_PRO_DETAILS, ServiceHandler.GET);
            Log.d("Response: ", "> " + jsonStr);
            if (jsonStr != null) {
                try {
                    jsonObjsss = new JSONObject(jsonStr);
                    // state_list = jsonObj.getJSONArray(COUNTRY_LIST);
                    // looping through All Contacts

                    profilessstates=new ArrayList<HashMap<String,String>>();

                    profilecitis=new ArrayList<HashMap<String,String>>();

                    if(jsonObjsss.getString(GET_PRO_USERSTATUS).equals("0"))
                    {
                        final String msgs=jsonObjsss.getString("message");
                        System.out.println("Messagessss"+msgs);
                        getActivity().runOnUiThread(new  Runnable()
                        {
                            @Override
                            public void run()
                            {

                                Toast.makeText(getActivity(), msgs, Toast.LENGTH_LONG).show();
                            }
                        });
                    }
                    else if(jsonObjsss.getString(GET_PRO_USERSTATUS).equals("1")) {

                        HashMap<String, String> mapzz = new HashMap<String, String>();
                        usersstatus = jsonObjsss.getString(GET_PRO_USERSTATUS);
                        usersfname = jsonObjsss.getString(GET_PRO_FIRSTNAME);
                        usersmails = jsonObjsss.getString(GET_PRO_EMAILS);
                        usersmob = jsonObjsss.getString(GET_PRO_MOBILE);
                        usersdobs = jsonObjsss.getString(GET_PRO_DATES);
                        usersaddresss = jsonObjsss.getString(GET_PRO_ADDRESS);
                        userszipss = jsonObjsss.getString(GET_PRO_ZIP);
                        userstates=jsonObjsss.getString(GET_PRO_STATE);
                        usercitys=jsonObjsss.getString(GET_PRO_CITY);

                        mapzz.put(GET_PRO_STATE, jsonObjsss.getString(GET_PRO_STATE));

                        mapzz.put(GET_PRO_CITY, jsonObjsss.getString(GET_PRO_CITY));
                        profilessstates.add(mapzz);

                        profilecitis.add(mapzz);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }
            return profilessstates;
        }
        protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
            super.onPostExecute(result);
            pDialog.dismiss();
            updtfname.setText(usersfname);
            updtmail.setText(usersmails);
            updtmob.setText(usersmob);
            updtaddress.setText(usersaddresss);
            updtpin.setText(userszipss);
            datestext.setText(usersdobs);

            arrprostates = new String[profilessstates.size()];
            for (int index = 0; index < profilessstates.size(); index++) {
                HashMap<String, String> map = profilessstates.get(index);
                arrprostates[index] = map.get(GET_PRO_STATE);
            }
            adapterprostates = new ArrayAdapter<String>(
                    Profiles.this.getActivity(),
                    android.R.layout.simple_spinner_dropdown_item, arrprostates);
            statespinner.setAdapter(adapterprostates);



            arrprocities = new String[profilecitis.size()];
            for (int index = 0; index < profilecitis.size(); index++) {
                HashMap<String, String> map = profilecitis.get(index);
                arrprocities[index] = map.get(GET_PRO_CITY);
            }
            adapterprocities = new ArrayAdapter<String>(
                    Profiles.this.getActivity(),
                    android.R.layout.simple_spinner_dropdown_item, arrprocities);
            cityspinner.setAdapter(adapterprocities);

加载所有状态

class LoadStatess extends
            AsyncTask<String, String, ArrayList<HashMap<String, String>>> {
        private ProgressDialog pDialog;
        private String test;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Profiles.this.getActivity());
            pDialog.setMessage("Please wait..");
            pDialog.setIndeterminate(true);
            pDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.custom_progress));
            pDialog.setCancelable(true);
            pDialog.show();
        }
        protected ArrayList<HashMap<String, String>> doInBackground(
                String... args) {
            ServiceHandler sh = new ServiceHandler();
            // Making a request to url and getting response
            statedata = new ArrayList<HashMap<String, String>>();
            String jsonStr = sh.makeServiceCall(STATE_URL, ServiceHandler.GET);
            Log.d("Response: ", "> " + jsonStr);
            if (jsonStr != null) {
                try {
                    jsonObj = new JSONArray(jsonStr);
                    // state_list = jsonObj.getJSONArray(COUNTRY_LIST);
                    // looping through All Contacts
                    for (int i = 0; i < jsonObj.length(); i++) {
                        JSONObject c = jsonObj.getJSONObject(i);
                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();
                        // adding each child node to HashMap key => value
                        map.put(USER_STATUSS, c.getString(USER_STATUSS));
                        map.put(PRESET_TITLES, c.getString(PRESET_TITLES));
                        statedata.add(map);

                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }
            return statedata;
        }
        protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
            super.onPostExecute(result);
           // pDialog.dismiss();
            arrallstates = new String[statedata.size()];
            for (int index = 0; index < statedata.size(); index++) {
                HashMap<String, String> map = statedata.get(index);
                arrallstates[index] = map.get(PRESET_TITLES);
            }
            // pass arrConuntry array to ArrayAdapter<String> constroctor :
            adapterallstates = new ArrayAdapter<String>(
                    Profiles.this.getActivity(),
                    android.R.layout.simple_spinner_dropdown_item, arrallstates);

            statespinner.setAdapter(adapterallstates);

            statespinner.setPrompt("Select State");
            statespinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    spitems = statespinner.getSelectedItem().toString();
                    System.out.println("PresetEVent selected" + spitems);


                    new Logincity().execute();
                }

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

默认情况下第一个屏幕获取

enter image description here

然后我点击加载状态显示enter image description here

然后再次点击它显示的唯一

enter image description here

2 个答案:

答案 0 :(得分:0)

将这些行放在活动的OnCreate方法中。

adapterallstates = new ArrayAdapter<String>(Profiles.this.getActivity(),android.R.layout.simple_spinner_dropdown_item, new ArrayList<String>());
statespinner.setAdapter(adapterallstates);

从onPostExecute中删除这些行:

adapterallstates = new ArrayAdapter<String>(Profiles.this.getActivity(),android.R.layout.simple_spinner_dropdown_item, arrallstates);
statespinner.setAdapter(adapterallstates);

将这些行添加到onPostExecute的for循环中。

adapterallstates.add(map.get(PRESET_TITLES));
adapterprostates.notifyDataSetChanged();

这样做会对你有用。

答案 1 :(得分:0)

另一个是,

    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            LoadListView();
    }

    private void LoadListView() {
            try {
               statespinner.setAdapter(adapterprostates);

            } catch (Exception e) {
               e.printStacktrace();
            }
        }