Java 选择状态后使用notifyDataSetChanged更新城市微调器

Java 选择状态后使用notifyDataSetChanged更新城市微调器,java,android,json,spinner,adapter,Java,Android,Json,Spinner,Adapter,一旦用户选择一个州,如何更新我的城市微调器? 这两个字段都使用DataCall.class填充,该类返回JSON数据并将信息解析为微调器的数组 下面的代码将城市适配器设置为defualt“Select State”值,一旦用户选择了应该使用notifyDataSetChanged的状态,因为城市微调器的默认数组将用新的城市名称更新。下面的代码中对我遇到的错误进行了注释 public class SearchActivity extends Activity{ private sta

一旦用户选择一个州,如何更新我的城市微调器?

这两个字段都使用
DataCall.class
填充,该类返回
JSON
数据并将信息解析为微调器的数组

下面的代码将城市
适配器
设置为defualt“Select State”值,一旦用户选择了应该使用notifyDataSetChanged的状态,因为城市微调器的默认数组将用新的城市名称更新。下面的代码中对我遇到的错误进行了注释

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();
          }
     }
}
公共类SearchActivity扩展活动{
私有静态最终字符串TAG=“MyApp”;
阵列适配器2;
字符串city_值[]=新字符串[]{“请选择一个州。”};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.search\u布局);
最终微调器zipspinner=(微调器)findViewById(R.id.zipspinner);
最终微调器cityspinner=(微调器)findViewById(R.id.cityspinner);
adapter2=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,city\u值);
adapter2.setDropDownViewResource(R.layout.city\u微调器\u layout);
cityspinner.setAdapter(适配器2);
JSONArray JSONArray;
试一试{
字符串喷丝头contentType=“state”;
字符串spinnerURL=“getStoreState.php”;
String spinner_data=DataCall.getJSON(spinnerURL,spinnerContentType);
Log.d(标签、微调器数据);
jsonArray=新jsonArray(微调器_数据);
最终字符串[]数组_微调器=新字符串[jsonArray.length()];
for(int i=0;i父项、视图、int位置、长id){
int item=zipspinner.getSelectedItemPosition();
如果(项目!=0){
}否则{
}
}
未选择公共无效(AdapterView父级){
//什么也不做。
}
});   
}捕获(JSONException e){
e、 printStackTrace();
}
}
}

在分配
新JSONArray()的位置声明
city\u数组
变量。不管怎样,你只是暂时使用它。只需再次设置适配器。

公共类SearchActivity扩展活动{
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();
        }
    }
}
阵列适配器2; 字符串city_值[]; @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.search\u布局); 最终微调器zipspinner=(微调器)findViewById(R.id.zipspinner); 最终微调器cityspinner=(微调器)findViewById(R.id.cityspinner); 字符串city_值[]=新字符串[]{“请选择一个州。”}; adapter2=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,city\u值); adapter2.setDropDownViewResource(R.layout.city\u微调器\u layout); cityspinner.setAdapter(适配器2); JSONArray JSONArray; 最终JSONArray cityArray; 试一试{ 字符串喷丝头contentType=“state”; 字符串spinnerURL=“getStoreState.php”; String spinner_data=DataCall.getJSON(spinnerURL,spinnerContentType); jsonArray=新jsonArray(微调器_数据); 最终字符串[]数组_微调器=新字符串[jsonArray.length()]; for(int i=0;i

现在试试看,这就是我的建议

首先,检查您是否在
city\u values
中获取值。 然后,通知适配器….
adapter2.notifyDataSetChanged();
最后是
cityspinner.setSelection(0);

我建议用trake
ArrayList代替String[]


谢谢……

这就是我最初的做法,请看我几周前的帖子:但后来我在new ArrayAda上出错了
UPDATE: