android省份数据xml文件,android读取xml文件来实现省份,城市,区的选择

本博客如需转载。请注明出处。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

今天要实现省份,城市。区的选择,到网络上百度了一下。发现非常多实现都是用的sqlite数据库,可是我这边为了保证和ios那边数据统一,仅仅要用那边的plist文件。也就是我们常说的xml文件。就想找一个网络上读取xml文件来实现的。发现基本没有,就算有。也是把所有的资源所实用数组列举出来,而不是实时读取。

网络上的实现:

1.利用sqlite訪问db数据库。

2.列举出全部的xml资源。

我的实现:

1.动态读取xml文件。

2.须要什么读取什么,假设获取了想要的资源。则停止读取。

3.异步读取。

改进:

1.读取的资源没有进行缓存。这个看详细需求吧。

2.代码实现算法能够进行优化。

3.xml文件结构能够优化,这个是ios那边直接给我的资源。可是看着非常无语,city.xml比較少,就直接手动改动了一下,area.xml文件比較多,就没改了。

建议:

这个博客仅仅是给大家提供了一个实现的思路,大家不好照搬,最好依据自己的需求来详细实现,最好是换一个结构更加合理的xml文件,在实现一个比較优秀的算法。切记,本博客仅仅是提供一个思路!~。~

city.xml的基本结构

state

北京

cities

通州

房山

昌平

顺义

怀柔

大兴

密云

平谷

延庆

东城

崇文

西城

朝阳

宣武

石景山

丰台

门头沟

海淀

....

1.读取城市的代码

/**

* 获取省份数据列表

*/

private List getProvince(){

//结果存储

List resultList = new ArrayList();

//标记是否读取下一个节点的内容

boolean nextRead = false;

try {

XmlPullParser xrpCity = Xml.newPullParser();

xrpCity.setInput(getAssets().open("city.xml"), "UTF-8");

while (xrpCity.getEventType() != XmlPullParser.END_DOCUMENT) {

//假设是開始标签

if (xrpCity.getEventType() == XmlPullParser.START_TAG) {

//获取标签名称

String name = xrpCity.getName();

//推断标签名称是否等于friend

if("key".equals(name)){

xrpCity.next();

String value = xrpCity.getText();

if("state".equals(value)){

nextRead = true;

}

}else if("string".equals(name) && nextRead){

xrpCity.next();

resultList.add(xrpCity.getText());

nextRead = false;

}

}

//下一个标签

xrpCity.next();

}

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

resultList = null;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

resultList = null;

}

return resultList;

}

2.读取城市的代码

/**

* 获取城市列表

*/

private List getCity(String provinceName){

//结果存储

List resultList = new ArrayList();

//标记是否读取下一个节点的内容

boolean nextRead = false;

//读取城市节点内容的标记

boolean readCity = false;

try {

XmlPullParser xrpCity = Xml.newPullParser();

xrpCity.setInput(getAssets().open("city.xml"), "UTF-8");

while (xrpCity.getEventType() != XmlPullParser.END_DOCUMENT) {

//假设是開始标签

if (xrpCity.getEventType() == XmlPullParser.START_TAG) {

//获取标签名称

String name = xrpCity.getName();

if("key".equals(name)){

xrpCity.next();

String value = xrpCity.getText();

if("state".equals(value)){

nextRead = true;

if(readCity){

break;

}

readCity = false;

}

}else if("string".equals(name) && nextRead){

xrpCity.next();

nextRead = false;

if(provinceName.equals(xrpCity.getText())){

readCity = true;

}

}else if("string".equals(name) && readCity){

xrpCity.next();

resultList.add(xrpCity.getText());

}

}

//下一个标签

xrpCity.next();

}

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

resultList = null;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

resultList = null;

}

return resultList;

}

area.xml资源的基本结构

....

areas

连山壮族瑶族自治县

阳山县

佛冈县

清城区

连南瑶族自治县

清新县

英德市

连州市

city

清远

.....

1.读取区的代码

/**

* 获取区列表

*/

private List getRegion(String citName){

//结果存储

List resultList = new ArrayList();

//标记是否读取下一个节点的内容

boolean nextRead = false;

//读取城市节点内容的标记

boolean readCity = false;

try {

XmlPullParser xrpCity = Xml.newPullParser();

xrpCity.setInput(getAssets().open("area.xml"), "UTF-8");

while (xrpCity.getEventType() != XmlPullParser.END_DOCUMENT) {

//假设是開始标签

if (xrpCity.getEventType() == XmlPullParser.START_TAG) {

//获取标签名称

String name = xrpCity.getName();

if("key".equals(name)){

xrpCity.next();

String value = xrpCity.getText();

if("areas".equals(value)){

nextRead = true;

readCity = false;

}else if("city".equals(value)){

readCity = true;

nextRead = false;

}

}else if("string".equals(name) && nextRead){

xrpCity.next();

resultList.add(xrpCity.getText());

}else if("string".equals(name) && readCity){

xrpCity.next();

if(citName.equals(xrpCity.getText())){

break;

}else{

resultList.clear();

}

}

}

//下一个标签

xrpCity.next();

}

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

resultList = null;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

resultList = null;

}

return resultList;

}

上面就是基本的实现,待会把功能做个小项目,传到csdn之后。在给出demo地址,和资源。

地址例如以下:http://download.csdn.net/detail/jiguangcanhen/8152421

该项目为ant架构,gradle架构的懒得弄了,自己搞定吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值