//区域的bean
public class DistrictModel {
private String name;
private String zipcode;
public DistrictModel() {
super();
}
public DistrictModel(String name, String zipcode) {
super();
this.name = name;
this.zipcode = zipcode;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
@Override
public String toString() {
return “DistrictModel [name=” + name + “, zipcode=” + zipcode + “]”;
}
}
2.2 解析本地xml 数据
public class XmlParserHelper extends DefaultHandler {
/**
- 存储所有的解析对象
*/
private List provinceList = new ArrayList();
public XmlParserHelper() {
}
public List getDataList() {
return provinceList;
}
@Override
public void startDocument() throws SAXException {
// 当读到第一个开始标签的时候,会触发这个方法
}
ProvinceModel provinceModel = new ProvinceModel();
CityModel cityModel = new CityModel();
DistrictModel districtModel = new DistrictModel();
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// 当遇到开始标记的时候,调用这个方法
if (qName.equals(“province”)) {
provinceModel = new ProvinceModel();
provinceModel.setName(attributes.getValue(0));
provinceModel.setCityList(new ArrayList());
} else if (qName.equals(“city”)) {
cityModel = new CityModel();
cityModel.setName(attributes.getValue(0));
cityModel.setDistrictList(new ArrayList());
} else if (qName.equals(“district”)) {
districtModel = new DistrictModel();
districtModel.setName(attributes.getValue(0));
districtModel.setZipcode(attributes.getValue(1));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// 遇到结束标记的时候,会调用这个方法
if (qName.equals(“district”)) {
cityModel.getDistrictList().add(districtModel);
} else if (qName.equals(“city”)) {
provinceModel.getCityList().add(cityModel);
} else if (qName.equals(“province”)) {
provinceList.add(provinceModel);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
}
}
2.3 提供辅助类获取对应的省份城市区域等
/**
- 中国城市区域的辅助类
*/
public class ProvinceAreaHelper extends Presenter{
private static final String TAG = “ProvinceAreaHelper”;
private Context mContext;
/**
- 所有省
*/
protected String[] mProvinceDatas;
/**
- key - 省 value - 市
*/
protected Map<String, String[]> mCitisDatasMap = new HashMap<String, String[]>();
/**
- key - 市 values - 区
*/
protected Map<String, String[]> mDistrictDatasMap = new HashMap<String, String[]>();
/**
- key - 区 values - 邮编
*/
protected Map<String, String> mZipcodeDatasMap = new HashMap<String, String>();
/**
- 当前省的名称
*/
protected String mCurrentProviceName;
/**
- 当前市的名称
*/
protected String mCurrentCityName;
/**
- 当前区的名称
*/
protected String mCurrentDistrictName =“”;
/**
- 当前区的邮政编码
*/
protected String mCurrentZipCode =“”;
public ProvinceAreaHelper(Context context){
mContext = context;
}
/**
- 解析省市区的XML数据
*/
public void initProvinceData(){
List provinceModelList;
AssetManager assetManager = mContext.getAssets();
try {
InputStream input = assetManager.open(“province_data.xml”);
//创建一个解析xml 的工厂对象
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
XmlParserHelper xmlParserHelper = new XmlParserHelper();
//开始解析xml
parser.parse(input,xmlParserHelper);
input.close();
//获取解析出来的数据
provinceModelList = xmlParserHelper.getDataList();
//*/ 初始化默认选中的省、市、区
if (provinceModelList!= null && !provinceModelList.isEmpty()) {
mCurrentProviceName = provinceModelList.get(0).getName();
List cityList = provinceModelList.get(0).getCityList();
if (cityList!= null && !cityList.isEmpty()) {
mCurrentCityName = cityList.get(0).getName();
List districtList = cityList.get(0).getDistrictList();
mCurrentDistrictName = districtList.get(0).getName();
mCurrentZipCode = districtList.get(0).getZipcode();
}
}
if(provinceModelList!=null){
mProvinceDatas = new String[provinceModelList.size()];
// 遍历所有省的数据
for (int i=0; i< provinceModelList.size(); i++) {
mProvinceDatas[i] = provinceModelList.get(i).getName();
List cityList = provinceModelList.get(i).getCityList();
String[] cityNames = new String[cityList.size()];
// 遍历省下面的所有市的数据
for (int j=0; j< cityList.size(); j++) {
cityNames[j] = cityList.get(j).getName();
List districtList = cityList.get(j).getDistrictList();
String[] distrinctNameArray = new String[districtList.size()];
// 遍历市下面所有区/县的数据
for (int k=0; k<districtList.size(); k++) {
DistrictModel districtModel = new DistrictModel(districtList.get(k).getName(), districtList.get(k).getZipcode());
// 区/县对于的邮编,保存到mZipcodeDatasMap
mZipcodeDatasMap.put(districtList.get(k).getName(), districtList.get(k).getZipcode());
distrinctNameArray[k] = districtModel.getName();
}
// 市-区/县的数据,保存到mDistrictDatasMap
mDistrictDatasMap.put(cityNames[j], distrinctNameArray);
}
// 省-市的数据,保存到mCitisDatasMap
mCitisDatasMap.put(provinceModelList.get(i).getName(), cityNames);
}
}
}catch (Exception e){
Log.e(TAG, “解析省市区的XML数据 Exception=” + e.getMessage());
e.printStackTrace();
}
}
public String[] updateCities(String provinceName){
mCurrentProviceName = provinceName;
要如何成为Android架构师?
搭建自己的知识框架,全面提升自己的技术体系,并且往底层源码方向深入钻研。
大多数技术人喜欢用思维脑图来构建自己的知识体系,一目了然。这里给大家分享一份大厂主流的Android架构师技术体系,可以用来搭建自己的知识框架,或者查漏补缺;
对应这份技术大纲,我也整理了一套Android高级架构师完整系列的视频教程,主要针对3-5年Android开发经验以上,需要往高级架构师层次学习提升的同学,希望能帮你突破瓶颈,跳槽进大厂;
最后我必须强调几点:
1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。
你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
最后我必须强调几点:
1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。
你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!