android 解析本地中国城市列表的辅助类(1)

//区域的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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值