一、解析省市区Json文件
此处只解析了本地json文件,spinner组件并没有实现省市区三级联动功能,后续再补充,欢迎讨论。
要解析的json文件百度网盘连接 网盘连接
1、XML文件如下,只有三个spinner组件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<Spinner
android:id="@+id/spi_province"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Spinner
android:id="@+id/spi_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Spinner
android:id="@+id/spi_area"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
2、Java文件如下,initData( ) 函数负责解析json文件,此处直接简单粗暴的用解析的数据初始化了三个 list ,并未做到省市区的三级联动功能。 spinner组件默认显示列表首位的值。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private Spinner spiProvince,spiCity,spiArea;
private ArrayAdapter<String> adaProvince,adaCity,adaArea;
private List<String> proList,cityList,areaList;
private int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spiProvince = findViewById(R.id.spi_province);
spiCity = findViewById(R.id.spi_city);
spiArea = findViewById(R.id.spi_area);
proList = new ArrayList<String>();
cityList = new ArrayList<String>();
areaList = new ArrayList<String>();
initData();
adaProvince = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,proList);
adaCity = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,cityList);
adaArea = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,areaList);
adaProvince.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adaCity.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adaArea.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spiProvince.setAdapter(adaProvince);
spiCity.setAdapter(adaCity);
spiArea.setAdapter(adaArea);
spiProvince.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
position = i;
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
public List<String> initData(){
try {
InputStream inputStream = getResources().getAssets().open("province.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null){
stringBuffer.append(line);
}
JSONArray jsonArray = new JSONArray(stringBuffer.toString());
for(int i =0; i<jsonArray.length();i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String proName = jsonObject.getString("name");
//获取省列表
Log.e(TAG,"proName = " + proName);
proList.add(proName);
JSONArray cityArray = jsonObject.getJSONArray("city");
for (int j=0; j<cityArray.length(); j++){
JSONObject cityObject = cityArray.getJSONObject(j);
String cityName = cityObject.getString("name");
//获取市列表
Log.e(TAG,"cityName = " + cityName);
cityList.add(cityName);
JSONArray areaArray = cityObject.getJSONArray("area");
for (int k=0 ; k<areaArray.length(); k++){
String areaName = areaArray.getString(k);
//获取区域列表
Log.e(TAG,"areaName = " + areaName);
areaList.add(areaName);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return proList;
}
}