Update City Spinner with notifyDataSetChanged after state selection

How to update my city when a user selects a state?

Both fields are populated using DataCall.class , which returns JSON data and parses the information in the array for the counter.

My code below sets the city of the adapter to defulatet "Select State", and as soon as the user receives, selects the state in which he should use notifyDataSetChanged, since the default array for the city counter is updated with new city names. The errors that I get are commented out in my code below.

 public class SearchActivity extends Activity{ private static final String TAG = "MyApp"; ArrayAdapter<String> adapter2; String city_values[] = new String[]{"Please select a state."}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_layout); final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner); final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner); adapter2 = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, city_values); adapter2.setDropDownViewResource(R.layout.city_spinner_layout); cityspinner.setAdapter(adapter2); JSONArray jsonArray; try { String spinnerContentType = "state"; String spinnerURL = "getStoreState.php"; String spinner_data = DataCall.getJSON(spinnerURL,spinnerContentType); Log.d(TAG, spinner_data); jsonArray = new JSONArray(spinner_data); final String[] array_spinner = new String[jsonArray.length()]; for (int i=0; i<jsonArray.length(); i++) { String styleValue = jsonArray.getJSONArray(i).getString(0); Log.d(TAG, styleValue); array_spinner[i] = styleValue; } ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item,array_spinner); adapter.setDropDownViewResource(R.layout.state_spinner_layout); zipspinner.setAdapter(adapter); zipspinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) { int item = zipspinner.getSelectedItemPosition(); if(item != 0){ String item_value = array_spinner[item]; String spinnerContentType = "city"; String spinnerURL = "getStoreCity.php?state=" + item_value; Log.d(TAG, spinnerURL); String city_data = DataCall.getJSON(spinnerURL,spinnerContentType); Log.d(TAG, city_data); JSONArray cityArray = null; try { cityArray = new JSONArray(city_data); } catch (JSONException e) { e.printStackTrace(); } final String[] city_spinner = new String[cityArray.length()]; for (int i=0; i<cityArray.length(); i++){ String styleValue = null; try { styleValue = cityArray.getJSONArray(i).getString(0); Log.d(TAG, styleValue); } catch (JSONException e) { e.printStackTrace(); } city_spinner[i] = styleValue; } city_values = city_spinner; adapter2.notifyDataSetChanged(); String test_string = "NOTIFY UPDATE"; Log.d(TAG, test_string); } else { // finish(); } } public void onNothingSelected(AdapterView parent) { // Do nothing. } }); cityspinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) { int item = zipspinner.getSelectedItemPosition(); if(item != 0){ }else{ } } public void onNothingSelected(AdapterView parent) { // Do nothing. } }); }catch (JSONException e) { e.printStackTrace(); } } } 
+4
source share
3 answers
 public class SearchActivity extends Activity { ArrayAdapter<String> adapter2; String city_values[]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_layout); final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner); final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner); String city_values[] = new String[]{"Please select a state."}; adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, city_values); adapter2.setDropDownViewResource(R.layout.city_spinner_layout); cityspinner.setAdapter(adapter2); JSONArray jsonArray; final JSONArray cityArray; try { String spinnerContentType = "state"; String spinnerURL = "getStoreState.php"; String spinner_data = DataCall.getJSON(spinnerURL, spinnerContentType); jsonArray = new JSONArray(spinner_data); final String[] array_spinner = new String[jsonArray.length()]; for (int i = 0; i < jsonArray.length(); i++) { String styleValue = jsonArray.getJSONArray(i).getString(0); array_spinner[i] = styleValue; } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, array_spinner); adapter.setDropDownViewResource(R.layout.state_spinner_layout); zipspinner.setAdapter(adapter); zipspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { int item = zipspinner.getSelectedItemPosition(); String item_value = array_spinner[item]; String spinnerContentType = "city"; String spinnerURL = "getStoreCity.php?state=" + item_value; String city_data = DataCall.getJSON(spinnerURL, spinnerContentType); cityArray = new JSONArray(city_data); //The final local variable cityArray cannot be assigned, since it is defined in an enclosing type final String[] city_spinner = new String[cityArray.length()]; for (int i = 0; i < cityArray.length(); i++) { String styleValue = cityArray.getJSONArray(i).getString(0); //Unhandled exception type JSONException city_spinner[i] = styleValue; } city_values = city_spinner; //Unhandled exception type JSONException adapter2.notifyDataSetChanged(); } public void onNothingSelected(AdapterView parent { // Do nothing. } }); } catch (JSONException e) { e.printStackTrace(); } } } 

try

+1
source

Well, here is how I suggest

First of all, check that you get the values ​​in city_values . Then report this to the adapter .... adapter2.notifyDataSetChanged(); And finally, cityspinner.setSelection(0);

 UPDATE: 

I would suggest trake ArrayList<String> instead of String[]

Thanks...

+4
source

Declare the city_array variable where you assign new JSONArray() . In any case, you use it temporarily. Just install the adapter again.

0
source

All Articles